今天我在服务器上对一个目录下的图片打包的时候, 执行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”