「破損した」ファイルを見つけるには、findコマンドにifを入れ子にします。

「破損した」ファイルを見つけるには、findコマンドにifを入れ子にします。

ディレクトリ構造内の「破損した」ファイル、つまりファイルコマンドが「データ」と解釈するファイルを見つけようとします。これは私が実行しようとしましたが失敗したコマンドです。

$ 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")使用すると、ホームディレクトリ全体を削除できるため、これは非常に危険で移植性がありません。

おすすめ記事