在目录中为每个文件创建 1 个 zip 文件

在目录中为每个文件创建 1 个 zip 文件

要压缩文件我使用:

 zip -r 1.zip 1.graffle

这按预期工作。但是我如何修改 zip 以压缩当前文件夹中的每个文档,其中每个 zip 文件都是 1:1 映射。换句话说,所有文件都不会添加到单个 zip 文件中。

是否可以修改以下命令来实现这一点?“:

zip -r files.zip .

答案1

您可以zip为每个文件调用一次:

for f in *.graffle; do zip -r "${f%%.*}.zip" "$f"; done

这将遍历所有.graffle文件并调用zip每个文件。存档名称将根据文件名减去扩展名来设置,.graffle扩展名可通过以下方式删除字符串操作

如果您想要压缩多个扩展名的文件,只需将它们添加到开头即可,例如for f in *.graffle *.jpg等等。

请注意,这可能有点慢,因为它一次只能处理一个文件。如果你有GNUparallel(您可以通过以下方式安装自制使用brew install parallel):

parallel 'zip -r {.}.zip {}' ::: *.graffle

这将使用多个核心并行运行所有 ZIP 命令,因此如果您有大量文件,它将更快。此处,{.}负责从输入文件名中删除扩展名,并将{}其替换为文件名本身。

答案2

如果您位于包含文件的同一目录中,则可以执行:

$ for f in $(ls -1); do zip -r $f.zip $f; done;

或者在另一个目录中:

for f in $(ls -1 /path/to/files); do zip -r $f.zip $f; done;

相关内容