是否有命令可以提取另一个 zip 文件内的一组 zip 文件而不是全部提取?例如:
A.zip 有(B.zip、C.zip、c_directory、d.txt)如何在不提取 c_directory 或 d.txt 的情况下提取 B.zip 和 C.zip?
我们需要比较B.zip和C.zip中的内容,通过比较它们内部文件的大小来寻找它们的差异。
谢谢大家。
答案1
根据man unzip
:
NAME
unzip - list, test and extract compressed files in a ZIP ar‐
chive
SYNOPSIS
unzip [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] file[.zip]
[file(s) ...] [-x xfile(s) ...] [-d exdir]
[file(s)]
An optional list of archive members to be processed,
separated by spaces. (VMS versions compiled with
VMSCLI defined must delimit files with commas instead.
See -v in OPTIONS below.) Regular expressions (wild‐
cards) may be used to match multiple members; see
above. Again, be sure to quote expressions that would
otherwise be expanded or modified by the operating sys‐
tem.
换句话说,档案名称后给出的参数被视为要提取的文件列表:
$ unzip A.zip B.zip C.zip
如果你想比较内容两个 zip 文件,您可以列出每个存档中的文件并比较列表。选项-lqq
将导致unzip
列出存档中的文件:
$ unzip -lqq A.zip
424 2013-03-24 04:39 B.zip
424 2013-03-24 04:39 C.zip
424 2013-03-24 04:39 d.txt
因此,要比较两个档案,请列出每个档案中的文件,保存到文本文件中,然后比较文本文件:
$ unzip -lqq A.zip | sort > A_files.txt
$ unzip -lqq D.zip | sort > D_files.txt
$ diff A_files.txt D_files.txt | grep '<\|>'
< 0 2013-03-24 04:57 only_in_A.txt
> 0 2013-03-24 04:57 only_in_D.txt