遇到的问题:
`执行zip命令碰到"Argument list too long"`
直观的问题描述:
Linux下在使用cp,mv,rm、zip等命令时经常会碰到“Argument list too long”的错误,这主要是因为这些命令的参数太长,即:文件个数过多导致的。
解决办法:
# 方法一:
find dir/ -name "*.bin" | xargs -i zip aa.zip {}
# 方法二:
find dir/ -name "*.bin" -exec zip aa.zip {} \;
其中dir/
为源文件夹地址;
"*.bin"
为源文件名;
方法一中xargs
命令时给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具;-i
会将xargs
的内容赋值给{}
。
方法二中-exec
参数后面是指执行其后面的命令,-exec
以;
为结尾,由于各个系统中分号的意义不同,因此用\
进行转义,即;\
,此外,运行过程中{}
会被find
命令的结果替换。
同样的,rm以及cp的命令如下:
# 删除文件夹下以bin结尾的文件
# 方法一:
find dir/ -name "*.bin" | xargs -i rm {}
# 方法二:
find dir/ -name "*.bin" -exec rm {} \;
# 拷贝文件夹下以bin结尾的文件到目标文件目录下
# 方法一:
find dir/ -name "*.bin" | xargs -i cp {} dir1
# 方法二:
find dir/ -name "*.bin" -exec cp {} dir1 \;
问题
上述方法的确解决了问题,但是对于大量文件,处理速度仍然较慢
本解决办法参考:Linux中执行zip、cp、rm等命令时出现“Argument list too long”的解决方法