"-bash: /usr/bin/zip: Argument list too long" 解决方法
2014-12-09 23:24
Linux
zip
find
参数列表过长
摘要:打包 20 万张图片时 zip 报 Argument list too long,分享一下用 find + 管道 + zip -@ 绕过参数长度限制的方法。
今天我在服务器上对一个目录下的图片打包的时候, 执行zip命令后,程序运行了一小会儿就停止了,并报错。 错误的提示:"-bash: /usr/bin/zip: Argument list too long" 造成此错误的原因是我该目录下的图片数量太多, 多达近20W张图片。 在shell下, 参数列表是有长度限制的, 任何执行语句都是如此。 例如我输入 “ls images/*.jpg” 会出现同样的错误, shell试图去寻找所有的jpg文件并且将它们作为参数传给ls,这就导致文件名的长度或者文件数量超出了限制。 文件数量太多, 要想办法不让它们一次全部传递, 一次检查一个文件并将它压缩。代码如下: 报错的shell:
zip -r images.zip images/*.jpg
修改后正常执行的shell:
find images/ -name '*.jpg' -print | zip images.zip -@
参考:Zip gives error "-bash: /usr/bin/zip: Argument list too long"