sha1sumsファイルとmd5sumsファイルを含む一連のディレクトリがあります。これらのファイルの形式は、一般的なhash space space filename
1行に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をエスケープし、スキャンモードにあるときにエスケープする必要があるファイル名の前に追加し、ファイルの相対パスと印刷されたファイル名を連結して\
得られたパスを適切にしません。再利用のため。SHA1SUMS
sha1sum
1 手動(sha1sum
マニュアルはmd5sum
) 一般的に言えば「問題の各キャラクターに対する」マニュアルを言います。