如何使用 zip -T 检查多个 zip 文件的 CRC

问题描述 投票:0回答:4

我有用于检查多个 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%)

linux bash zip crc
4个回答
1
投票

您始终可以使用查找命令:

find . -name "*.zip" -exec zip -T {} \; >> wynik.txt

在这里您可以使用

-maxdepth N
选项来控制查找的深度。


0
投票

替换以下行

zip -T $file && echo "OK" >> wynik.txt || echo "BAD" >> wynik.txt

如果结果失败

&&
会失败并输出“BAD”

如果结果成功

&&
失败并输出“OK”


0
投票

您还可以使用

xargs
unzip
:

ls -1 | xargs -L1 -I {} unzip -t  {}

如果它们是子文件夹

tree
会这样做:

tree -fai . | xargs -L1 -I {} unzip -t  {}

0
投票

因为没有一个答案直接涵盖如何在每个文件路径旁边仅使用

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"
,输出将仅包含所有失败的文件。

© www.soinside.com 2019 - 2024. All rights reserved.