问题

尝试从命令行列出或者与大量文件交互时,会导致以下错误:

$ ls -l *.xml | wc -l
bash: /bin/ls: Argument list too long 《 --- 参数列表太长
0
$ rm *.xml
bash: /bin/rm: Argument list too long
bash:/bin/rm:参数列表太长

或者在尝试使用 find 命令删除大量文件时失败并显示以下错误消息:

$ find /u01/oracle/apps/fs1/EBSapps/appl/xdo/12.0.0/temp/*.xml -mtime +120 -exec rm -v {} \;
bash: /usr/bin/find: Argument list too long
无法从目录中删除文件,报错:Argument list too long
欢迎来到之路教程(on itroad-com)

解决方案

内核对命令行施加了一个很大但有限的限制,上面显示的错误表明已达到限制。

要解决此问题,可以使用 xargs,它接受来自其标准输入的文件名列表并对其运行命令。
我们可以将 'find' 与 'xargs' 结合使用,如下所示:

# find . -type f -name '*.xml' | xargs rm

注意:上述命令将删除当前目录中所有扩展名为 .xml 的文件,无需任何确认。
我建议我们在执行之前先备份必要的文件。
在继续生产机器之前,在测试机器上进行验证和检查总是好的。

日期:2020-09-17 00:12:42 来源:oir作者:oir