拡張子が.tif、.tiff、.TIF、.TIFFのすべてのファイルを一覧表示します。

拡張子が.tif、.tiff、.TIF、.TIFFのすべてのファイルを一覧表示します。

.tif入れ子になったディレクトリが与えられると、拡張子が 、 、.TIF。すべての.tifftifファイルをリストしたいです.TIFF

現在私が使用している

find . -type f -iname *.TIF -print ; find . -type f -iname *.TIFF -print;

を使用すると-iname大文字と小文字を区別できますが、ディレクトリを2回繰り返してファイルを含む.tifファイルをインポートします.tiff。もっと良い方法がありますか?たぶん支柱の拡張が必要かもしれませんか?

なぜダメなの*.tif*

場合によっては、私のディレクトリに.tif.aux.xmltiffの横に拡張子を持つ補助ファイルを含めることができます。私はそれらを無視したいと思います。

答え1

find「または」分離をサポートします-o

find . -type f \( -iname \*.tif -o -iname \*.tiff \)

*.tifこれにより、名前は大文字と小文字が無視され、一致するすべてのファイルが一覧表示されます*.tiff

-printは基本操作なので、ここで指定する必要はありません。*、エスケープされているので()シェルで意味を失います。

答え2

を使用するよりも短いです-o。代わりに正規表現を使用してください。

find . -type f -iregex '.*\.tiff?'

中かっこ拡張はそうではありませんグローバルマッチなので、一緒に使うことはできません-(i)name

答え3

findコマンドを実行したいツリーの最上位ディレクトリにあると仮定し、目的の出力を取得する簡単な方法は次のとおりです。免責事項:高度な使用または照会シナリオには適していません。

find -type f |egrep '.tif$|.tiff$|.TIF$|.TIFF$'

説明する:

  1. デフォルトでは、gnu findは現在のディレクトリに再帰し、出力をstdoutとして印刷します(ドットまたは-printオプションは必要ありません)。
  2. egrep は拡張正規表現を受け入れます。末尾の$は、ファイル名がtifで終わる必要があることを意味します。したがって、foo.tif.barは一致すると見なされません。
  3. このパイプはどのパターンにも一致するORです。

関連情報