sha1sumを確認し、破損したファイルのディレクトリとファイル名を印刷します。

sha1sumを確認し、破損したファイルのディレクトリとファイル名を印刷します。

sha1sumsファイルとmd5sumsファイルを含む一連のディレクトリがあります。これらのファイルの形式は、一般的なhash space space filename1行に1つのハッシュ/ファイルです。ファイルを検証し、破損したファイルのパスとファイル名を印刷したいと思います。

find . -name SHA1SUMS -execdir echo "$PWD" sha1sum --quiet --check SHA1SUMS \; > logfile

(で修正済みここ) 提供

./path1/SHA1SUMS
sda2.ntfs-ptcl-img.gz.aa: FAILED
blkdev.list: FAILED
Info-dmi.txt: FAILED
./path2/SHA1SUMS

そして私はもっと探しています。

./path1/sda2.ntfs-ptcl-img.gz.aa: FAILED
./path1/blkdev.list: FAILED
./path2/file: FAILED

出力タイプ。

ベストアンサー1

find . -name SHA1SUMS -exec sh -c '
  cd "${1%/*}" &&
  sha1sum --check --quiet "${1##*/}" 2>/dev/null |
    while IFS= read -r file
    do
      printf "%s\n" "${1%/*}/$file"
    done' sh {} \;

出力は質問に示されている例と一致し、任意のパスで機​​能する必要があります。

または、awkシェル関数の代わりに使用して、SHA1SUMS各ファイル名の前に相対パスを追加します。

find . -name SHA1SUMS -exec sh -c '
  cd "${1%/*}" &&
  sha1sum --check --quiet "${1##*/}" 2>/dev/null |
    awk -v pre="${1%/*}" "{ print pre \"/\" \$0 }"' sh {} \;

実装によっては、sha1sum変更されたファイル名が印刷されることがあります。具体的には、GNU*sumユーティリティは特定の文字1をエスケープし、スキャンモードにあるときにエスケープする必要があるファイル名の前に追加し、ファイルの相対パスと印刷されたファイル名を連結して\得られたパスを適切にしません。再利用のため。SHA1SUMSsha1sum

1 手動sha1sumマニュアルはmd5sum) 一般的に言えば「問題の各キャラクターに対する」マニュアルを言います。

おすすめ記事