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
출력 유형.
답변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
) 일반적으로 말하면 "문제의 각 캐릭터에 대한" 매뉴얼을 말합니다.
답변2
#! /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
매우 드물지만 디렉터리에 가 포함되어 있으면 이 문제가 발생합니다.
답변3
이 시도:
find . -name SHA1SUMS -execdir \
sh -c 'sha1sum --quiet -c "$@" | sed "s|^|$PWD/|"' - {} +
디렉토리에 해당 문자가 포함되어 있으면 |
sed 대체에 다른 문자를 사용하거나 awk -v p="$PWD/" "{print p\$0}"
.
경로에 다음이 포함된 경우개행 문자이보다 더 똑똑한 것이 필요합니다 ;-)