在 bash 中,我使用unzip -l
order 来显示 zip 的内容而不提取其内容。
我的问题是:如果我有嵌套的 zip 文件并且还想探索其中嵌套 zip 的内容,我应该使用什么命令?
例子:
file1.zip
|
|
----- textfile.txt
----- file2.zip
如何对 file2.zip 执行 unzip -l 操作而不提取 file1.zip 和 file2.zip?
答案1
我认为这不是任何常见 bash zip 实用程序的标准行为。您必须事先提取 zip,但您可以编写一个脚本,仅提取 file1.zip 根目录中的 zip 文件,调用它unzip -l
然后在其自身之后进行清理:
#!/bin/bash
unzip -l file1.zip
for f in $(unzip -Z1 file1.zip); do
if [ ${f: -4} == ".zip" ]
then
unzip -q -d . file1.zip $f
unzip -l $f
rm $f
fi
done;
输出:
Archive: file1.zip
Length Date Time Name
--------- ---------- ----- ----
312 2018-05-04 00:52 file2.zip
0 2018-05-04 00:52 textfile.txt
--------- -------
312 2 files
Archive: file2.zip
Length Date Time Name
--------- ---------- ----- ----
0 2018-05-04 00:22 file2
0 2018-05-04 00:52 textfile.txt
--------- -------
0 2 files
答案2
查看这个基于 Java 的实用程序压缩文件用于嵌套 zip 文件。使用以下命令可以轻松提取和压缩嵌套 zip 文件。list 命令应该对您有用:
java -jar nzip.jar -c list -s readme.zip
java -jar nzip.jar -c extract -s "C:\project\readme.zip" -t readme
java -jar nzip.jar -c compress -s readme -t "C:\project\readme.zip"