在Linux中使用cp, mv, rm, zip等命令时有时会遇到“Argument list too long”的错误,主要是要进行操作的文件过多导致的。
解决方案
主要有两种方法:
- 通过命令
find
+xargs
解决 - 通过命令
find
+exec
解决(此方法需要遍历文件,因此耗时较多)
示例
-
拷贝data文件夹下.png格式的文件到train目录
# 方法一 find data/ -name "*.png" | xargs -i cp {} train # 方法二 find data/ -name "*.png" -exec cp {} train \;
-
删除data文件夹下.png格式的文件
# 方法一 find data/ -name "*.png" | xargs -i rm {} # 方法二 find data/ -name "*.png" -exec rm {} \;
-
压缩当前目录中train_txt文件夹下.txt结尾的文件至当前目录,并命名新压缩文件为train_txt.zip
# 方法一 find train_txt/ -name "*.txt" | xargs -i zip train_txt.zip {} # 方法二 find train_txt/ -name "*.txt" -exec zip train_txt.zip {} \;
find xxx/ -name "*.xxx"
是指在指定文件夹下查找指定名称的文件。
xargs
是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。-i
会将xargs
的内容赋值给{}
。
-exec
参数后面是指执行其后面的命令,-exec
以;
为结尾,由于各个系统中分号的意义不同,因此用\
进行转义,即\;
,此外,运行过程中{}
会被find
命令的结果替换。
Reference
https://blog.csdn.net/weixin_42782150/article/details/107154593