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
도움이 되었기를 바랍니다.