压缩文件数量有限

whi*_*ngs 12 zip files

我可以使用什么命令来创建zip具有文件号限制的 s?我有一个包含 5000 个文件的文件夹(没有子文件夹),所以我想要一个命令来划分该数字并创建 10 个单独的zip档案,每个档案包含不超过 500 个文件。

我也不希望生成的 10 个zip文件相互连接,这样我就可以单独打开它们,而无需同时打开所有 10 个文件。

Ant*_*hon 13

您可以使用GNU parallel来执行此操作,因为它可以限制作业的元素数量并提供作业编号(对于唯一的 zip 存档名称):

$ touch $(seq 20)
$ find . ! -name "*.zip" -type f -print0 | parallel -0 -N 5 zip arch{#} {}
  adding: 1 (stored 0%)
  adding: 10 (stored 0%)
  adding: 11 (stored 0%)
  adding: 12 (stored 0%)
  adding: 13 (stored 0%)
  adding: 14 (stored 0%)
  adding: 15 (stored 0%)
  adding: 16 (stored 0%)
  adding: 17 (stored 0%)
  adding: 18 (stored 0%)
  adding: 19 (stored 0%)
  adding: 2 (stored 0%)
  adding: 20 (stored 0%)
  adding: 3 (stored 0%)
  adding: 4 (stored 0%)
  adding: 5 (stored 0%)
  adding: 6 (stored 0%)
  adding: 7 (stored 0%)
  adding: 8 (stored 0%)
  adding: 9 (stored 0%)
$ ls
1   11  13  15  17  19  20  4  6  8  arch1.zip  arch3.zip
10  12  14  16  18  2   3   5  7  9  arch2.zip  arch4.zip
Run Code Online (Sandbox Code Playgroud)

该选项-N 5将每个存档的文件数限制为 5 个,并zip代替{}

{#}(逐字,而不是被你调用时更换),由工号代替,造成arch1.ziparch2.zip等等。

-print0选项find-0选项parallel串联确保有特殊字符的文件名是正确处理。

  • @ user8547 不,只需运行`sudo apt-get install parallel`。 (2认同)
  • @user8547 为什么是`arch{13}`?您确实需要使用`#` 字符。你用的是什么壳? (2认同)
  • @ user8547 不,这是告诉并行将工作编号放在那里的方法,很高兴它成功了。 (2认同)