在 Bash 中使用 ZIP 存档

Posted

技术标签:

【中文标题】在 Bash 中使用 ZIP 存档【英文标题】:Work with ZIP archive at Bash 【发布时间】:2014-12-30 04:59:34 【问题描述】:

我需要编写一个简单的 Bash 脚本。如何解压缩包含多个文件的存档(在同一目录中)并获取这些解压缩文件的路径?归档路径在 $1 属性中。以及如何使用 $2 路径将这些文件打包回新存档中?谢谢

更新: 我试试这个: filenames=(zipinfo -1 $1\) extension=".csv" unzip $1 for i in "$filenames[@]" do : newfilename=$i:0:$#i-4$extension #change extension to .csv #...do smth... zip -r $2 $newfilename done 但是存档中有空文件“.csv”(没有名称,olny扩展名)。ъ

UPD2:解决了,因为测试目录名为“abc”,我对最后一个字符“$last”=“/”做了一个比较,结果成功了

【问题讨论】:

【参考方案1】:

如果 zipfile 是 foo.zip,解压存档,你可以这样做

unzip foo.zip

并列出你可以做的档案中的文件

zipinfo -1 foo.zip

【讨论】:

谢谢,但是如何将存档中的文件写入脚本中的变量? 您可以使用var=(`zipinfo -1 foo.zip`) 捕获存档中文件列表的输出,这会将文件存储到$var 数组中。 $#var[@] 将为您提供数组中元素的数量,$var[n] 将让您访问数组的nth 元素。 再等一下,如果存档目录中有文件怎么办?如何正确处理这个?

以上是关于在 Bash 中使用 ZIP 存档的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 在存档中查找特定文件

如何在 Windows 批处理文件中使用 7zip 从 ZIP 存档中提取最后一个目录?

python - 更新zip存档时文件重复

如何在ansible中更快地制作zip存档?

从 zip 存档中提取单个文件

如何使用 Java 将每个文件存储在 zip 存档中的数组中?