ディレクトリ構造内の「破損した」ファイル、つまりファイルコマンドが「データ」と解釈するファイルを見つけようとします。これは私が実行しようとしましたが失敗したコマンドです。
$ find . -type f -exec if [[ $(file \{} | cut -f2 -d':') == " data" ]] \; then echo " \{} is CORRUPT" \; else echo " \{} is DATA" \; fi \;
find: paths must precede expression: then
私がここで何を間違っているのか知っている人はいますか?
私はif
内部のパラメータを見たことがないことに気づきました-exec
。可能ですか?
デフォルトでは、私はその基準に一致するファイル(ファイルが特定のファイル形式を識別せずに「データ」として報告する)を見つけて、削除する前に分析できるようにリストしようとしています。
ベストアンサー1
これらの構成を解釈するか、これらのパイプを実行するにはシェルが必要ですif/then/else
(ここでは実際には必要ありませんが)。
find . -type f -exec sh -c '
for file do
case $(file -b "$file") in
(data) printf "%s is CORRUPT\n" "$file";;
(*) printf "%s is DATA\n" "$file";;
esac
done' sh {} +
file
(あなたの質問と同じように言えば、「CORRUPT」が印刷されますdata
。しかし、それが何を意味するのかわかりません。)
何をしても、{}
他の人が提案したようにシェルコードに含めないでください!たとえば、名前付きファイルを$(rm -rf "$HOME")
使用すると、ホームディレクトリ全体を削除できるため、これは非常に危険で移植性がありません。