손상된 아카이브 파일을 찾는 방법은 무엇입니까?

손상된 아카이브 파일을 찾는 방법은 무엇입니까?

zip 파일이 많이 있습니다. 일부는 올바르게 다운로드되지 않았으며 손상되었습니다. 삭제하고 싶습니다.

Bash에서 손상된 아카이브를 찾는 방법이 있습니까?

답변1

GNU를 사용하여 찾기( -readable-iname):

find . -iname '*.zip' -type f -readable ! -exec unzip -t {} \; -exec rm -i {} \;

답변2

다음 명령은 현재 디렉터리와 해당 하위 디렉터리에 있는 모든 손상된 zip 파일의 이름을 인쇄합니다.

#!/bin/bash
shopt -s dotglob nullglob globstar
for file in ./**/*.zip; do
    [[ -r $file ]] || continue
    unzip -t "$file" >/dev/null 2>&1 || printf '%s\n' "$file"
done

제거하려면 printf '%s\n' "$file"로 바꾸면 됩니다 rm -f "$file".

답변3

Bash에서 손상된 아카이브를 찾으려면 다음 스크립트를 사용합니다.

#!/bin/bash

# change myfolder value below fully
myfolder="/Users/nathan/Downloads/some folder"

cd "$myfolder"

rm -f testlog.sh
rm -f testlog.txt

SQ="'"

find . -type f -iname '*.zip' -print | while read line
do
echo "unzip -t ${SQ}${line}${SQ}" | tee -a testlog.sh 2>&1;
done

bash testlog.sh | tee -a testlog.txt 2>&1;

totalcommands=$(wc -l testlog.sh|awk '{print $1}')
totalstatus=$(grep -o "No errors detected in compressed data of " testlog.txt | grep -c "")

echo
if [ $totalcommands -eq $totalstatus ]; then
echo "-------------------------------"
echo "All Tests Returned Success !!!!"
echo "-------------------------------"
else
echo "---------------------------------------------------------------------------"
echo "Some Tests Failed. Please check the ${SQ}${myfolder}/testlog.txt${SQ} file."
echo "---------------------------------------------------------------------------"
fi
echo

도움이 되었기를 바랍니다.

관련 정보