ディレクトリ内の画像ファイルの数を見つけたいと思いました。私はこれを使用することになりました:
find . -type f -exec file {} \; | grep -c -i 'image'
これは非効率的な方法のように感じます。 ORステートメントを使用して、別の方法を考えることができましたが、manページからこれを行う方法を理解できませんでした。
これをより効率的に行う方法はありますか?かなり多数のファイルがあるディレクトリで上記のコマンドを実行したくないので、永遠にかかります。
拡張機能で画像を検索する場合は、次のコマンドを使用できます。
find -type f -name *.gif -o -name *.jpg -o -name *.bmp
もちろん、興味のあるすべての拡張機能をリストする必要があります。
カウントを取得するには、| wc -l
を追加できます。
\+
の代わりに\;
を使用すると、効率を向上させることができます。ここでの違いは、\+
が見つかったすべてのファイルをfile
の1回の実行に渡すことです。ここで、\;
は見つかったファイルごとに1回file
を実行します。
find . -type f -exec file {} \+ | grep -c -i 'image'
file
が引数として取ることができるよりも多くのファイルが見つかると、問題が発生します。その場合は、--max-args
オプションを使用してxargs
にパイプすることができます。
mime-type of file(この場合は「image」)でファイルを検索する場合は、次のコマンドが必要になります。
find . -type f -print0 | xargs -0 file -i | grep -i image | wc -l