我有用于检查多个 zip 文件的 CRC 的 bash 脚本:
#! /bin/bash
fileFormat="*.zip"
for entry in `ls $fileFormat`; do
echo $entry >> plikiZip
done
fileName=$(< plikiZip)
for file in "${fileName[@]}"; do
zip -T $file >> wynik.txt
done
我不知道为什么,我的 wynik.txt 包含:
adding: mf.gov.pl_1133863230349.zip (stored 0%)
adding: mf.gov.pl_1133863293588.zip (stored 0%)
adding: mf.gov.pl_1133863748942.zip (stored 0%)
adding: noweprzetargi.msgaz.pl_1133848724906.zip (stored 0%)
adding: swps.pl_1133864085863.zip (stored 0%)
adding: swps.pl_1133864308647.zip (stored 0%)
adding: swps.pl_1133864438352.zip (stored 0%)
test of mf.gov.pl_1133863028119.zip OK
我应该更改什么以使所有条目都显示“OK”或“BAD”而不是
添加:
和
(已存储 X%)
?
您始终可以使用查找命令:
find . -name "*.zip" -exec zip -T {} \; >> wynik.txt
在这里您可以使用
-maxdepth N
选项来控制查找的深度。
替换以下行
zip -T $file && echo "OK" >> wynik.txt || echo "BAD" >> wynik.txt
如果结果失败
&&
会失败并输出“BAD”
如果结果成功
&&
会不失败并输出“OK”
您还可以使用
xargs
和 unzip
:
ls -1 | xargs -L1 -I {} unzip -t {}
如果它们是子文件夹
tree
会这样做:
tree -fai . | xargs -L1 -I {} unzip -t {}
因为没有一个答案直接涵盖如何在每个文件路径旁边仅使用
OK
或 BAD
来制作 txt 文件:
find . \
-name "*.zip" \
-exec sh -c 'zip -T {} &>/dev/null && echo "{} OK" || echo "{} BAD"' \; \
>> wynik.txt
输出
foo.zip OK
bar.zip BAD
要排除
OK
行,请忽略 && echo "{} OK"
,输出将仅包含所有失败的文件。