我有一系列包含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输出类型。
发布于 2020-10-14 18:18:14
#! /bin/bash
here=$(pwd)
find . -name SHA1SUMS | while read -r fname; do
cd "$here" || exit
dirn=$(dirname "$fname")
cd "$dirn" || continue
sha1sum --quiet --check SHA1SUMS 2>&1 | grep " FAILED" | ( echo -n "$dirn/"; cat )
done > logfile如果您有包含\n的目录,这将中断,但这是极不可能的。
发布于 2020-10-14 19:09:44
试试这个:
find . -name SHA1SUMS -execdir \
sh -c 'sha1sum --quiet -c "$@" | sed "s|^|$PWD/|"' - {} +如果目录真正包含|,则可以在sed替换中使用其他字符,或者使用awk -v p="$PWD/" "{print p\$0}"。
如果您的路径确实包含换行符,那么您需要一些比这更聪明的东西;-)
https://unix.stackexchange.com/questions/614530
复制相似问题