zip:参数列表过长(总共80.000个文件)


13

我需要将80.000个文件压缩为多个zip文件。这是我使用的命令:

zip -s 200M photos_test/*

但是我收到以下错误:

-bash: /usr/bin/zip: Argument list too long

除了手动拆分文件夹文件外,我还可以采取什么措施来解决此问题?

谢谢


该错误-bash: /usr/bin/zip: Argument list too long可能导致以下情况:1-由于未使用-r开关,2-由于归档文件过多。因此,在第一种情况下,@ Mat的答案是正确的,在第二种情况下,@ IgnacioVazquez-Abrams的答案是正确的。
shgnInc

Answers:


13

如果您需要整个目录,则只需使用-r开关:

zip -r -s 200M myzip photos_test

那将包括所有的子目录photos_test


我已经按照您的建议做了,我有一个小的myzip.zip(7mb)和这些段(每个200mb)。但是,我无法解压缩内容,我正在运行unix unzip myzip.zip的解压缩,但是却得到“错误的zipfile偏移量(lseek)”。此外,我还需要在Windows环境中提取它们,我猜那里只有Windows 7提取器。
aneuryzm 2011年

这些是不同的问题,请为此打开另一个问题(链接至该参考)。确保张贴生成的zip文件的名称(不是全部,但至少是第一个和最后一个),以及您使用的确切命令行。

9

问题似乎是“ *”的扩展。使用文件夹名称或“。”:

如果要在zip中包含根文件夹:

zip -r my.zip folder_with_80k_files

如果您不想在zip文件中包含根文件夹,请执行以下操作:

cd folder_with_80k_files
zip -r my.zip .


3

ls photos_test | zip -s 200M -@ photos

  • -@将导致zip从stdin读取文件列表
  • |将管中的输出ls输入zip命令

man zip

USE
⋮
   -@ file lists.  If a file list is specified as -@ [Not on MacOS], zip takes
   the  list  of  input  files from standard input instead of from the command
   line.  For example,

          zip -@ foo

   will store the files listed one per line on stdin in foo.zip.

   Under Unix, this option can be used to powerful effect in conjunction  with
   the  find (1)  command.   For example, to archive all the C source files in
   the current directory and its subdirectories:

          find . -name "*.[ch]" -print | zip source -@

   (note that the pattern must be quoted to keep the shell from expanding it).
⋮
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.