Find
驗證 sha1sum 並列印損壞文件的目錄和文件名
我有一系列包含 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