JPEGファイルだけを見つける方法を探していますが、/Linuxに関する知識が不足して、次のような方法を思いつきました。
- ルートディレクトリに存在するすべてのパスを以下にリストします。
find /
- 結果を次のコマンドにパイプし、
file
見つかった各パスでそのコマンドを実行します。xargs file
- コマンドの結果には
file
JPEG文字列が含まれているので、IFステートメントは何とかJPEGのみをフィルタリングできると思いました。 If(JPEGはファイルコマンドの出力に含まれています){ファイルの引数を表示}
再:
find / | xargs file | "If statement"
私の言葉を訂正したり、仕事の実行方法についてのヒントや解決策を提供したいですか?
答え1
ファイル名の拡張子に関係なくJPEGイメージを含むファイルを一覧表示するには、find
+を使用してfile
MIMEタイプのファイルを一覧表示できますimage/jpeg
。
find . -type f -exec sh -c '
file --mime-type "$0" | grep -q image/jpeg\$ && printf "$0\n"
' {} \;
または
find . -type f -exec sh -c '
mt=$(file --brief --mime-type "$0")
[ -z "${mt#image/jpeg}" ] && printf "$0\n"
' {} \;
答え2
まず、.jpg
次のファイル拡張子を持つファイルを印刷できます。
sudo find / -name *.jpg -print
どのように機能するかを確認し、適切に変更し、必要に応じて出力を印刷するのではなく、出力を別の関数にパイプすることができます。たとえば、次も許可する場合.JPG
:
sudo find / -iname "*.jpg"
答え3
MIMEタイプを持つすべてのファイルのパスが印刷されます。写真/jpeg。
find / -type f -exec file --no-pad --mime-type {} + 2>/dev/null \
| awk '$NF == "image/jpeg" {$NF=""; sub(": $", ""); print}'
参考にするいくつかの点があります。
- 一度だけ呼び出す
-exec command {} +
代わりに使用してください(ファイルごとに1回呼び出す代わりに)。-exec command {} \;
file
- 一貫した出力形式を
--no-pad
保証するには(分析を容易にするため)、このオプションを使用します。file
2>/dev/null
のstderrを抑制するためにfind
必要な理由は、コマンドを実行すると/
コンソールを複雑にする多くの「許可拒否」エラーが発生するためです。