名前に〜*やその他の特殊文字を含むファイルを見つける方法は?
例えば
find . -name "*\*"
これは「すべての文字」と一致するはずです*
が、何も一致しません。コマンドがファイルと正しく一致するようにするにはどうすればよいですか?
答え1
実装は異なりますが、find
すべてワイルドカードで文字クラスを処理する必要があります(POSIX.2、セクション3.13)。
find . -name '*[~*]*'
改行文字が「特殊」文字の1つである場合は、シェルがそれらを見つけるために渡す方法を理解する必要があるかもしれません。 Bashでは、次のものを使用できます。
find . -name $'*[\t \n]*'
たとえば、スペースを含むファイルを表示します。より簡単な方法は、サポートされている場合は文字クラスを使用することです。
find . -name '*[[:space:]]*'
答え2
特定の文字を一致させるよりも一般的なものが必要な場合は、正規表現を使用する必要があります。質問に「linux」タグが付いていないため、正解はPOSIXを使用します。
find . | grep '[*~]'
Linuxにのみ適用するには、GNUfind
オプションを使用できます-regex
(サポートされています)。FreeBSD)。パス名に改行文字が含まれている場合(珍しい完了しましたが、次のように使用されます。よく反例)POSIX find
+はgrep
動作しません。ただし-regex
、拡張すると、改行文字を含む名前を「印刷できます」。
find . -regextype posix-awk -regex '.*[*~]'
見つける方法はこれですが、使用される問題の一部ではありません。
追加資料:
- 検索 - ファイルを検索(POSIX)
- find - ディレクトリ階層からファイルを検索する(牛のような栄養の一種)