Find

驗證 sha1sum 並列印損壞文件的目錄和文件名

  • October 15, 2020

我有一系列包含 sha1sums 和 md5sums 文件的目錄。這些文件的格式是通常的hash space space filename,每行一個雜湊/文件。我想驗證文件並列印出損壞文件的路徑和文件名。

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

輸出類型。

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而不是 shell 功能為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,並且在檢查模式下,將 a\添加到需要轉義的文件名前,從而使獲得的路徑連接文件的相對路徑SHA1SUMS和列印的文件名sha1sum不適合重用。

1手冊(的手冊指的是 的手冊)一般說“每個有問題的字元”。 sha1sum``md5sum

引用自:https://unix.stackexchange.com/questions/614530