我正在尝试删除系统为搜索机器人创建的会话文件。这次上次工作不起作用,我猜是因为会话文件的数量增加了。
我正在使用grep -l 'spider' * | xargs rm
但现在我从Argument list too long
收到grep
错误。
我是否可以通过find
和grep
使用rm
来完成此操作?
编辑:
没有文件中有空格。
我在想,由于grep
无法处理文件数量,我可能会使用find
来管理大量文件,因为我认为(可能不正确){{1}使用find
和exec
会自动将文件分解为可管理的块。但也许这不起作用。
不过,不管怎样,我真的需要删除这些文件!
编辑:
我真的无法解决这个问题。我删除了旧文件,直到文件计数足够小,我可以运行它:
{}
然后我每隔几分钟设置一个cron来运行命令。我现在能够延长会话的生命周期,因为cron的频率意味着运行grep -l "spider" * | xargs rm
命令的文件更少。
答案 0 :(得分:2)
您可以使用-n N
限制xargs传递给其命令的参数数量,其中N
是参数的数量。
您可以尝试不同的N值。
xargs -n 500 rm
您还可以查看以下内容是否适用于您的系统以确定限制。
xargs --show-limits
如果您需要使用grep查看文件名,可以链接命令
find . -type f | xargs -n 500 grep -l "spider" | xargs -n 500 ...
删除文件的另一种方法是避免命令行限制(但在这种情况下不起作用,因为过滤器在文件中,而不是文件名)。
find * -name "some file name pattern" -exec rm {} +
答案 1 :(得分:0)
另一个想法是构建rm xxx
语句并传递给sh
。
grep -l 'spider' * |sed 's/^/rm /'|sh
您可以先删除|sh
以检查命令是否正常。如果文件名中有空格,也可以通过扩展sed
来引用名称。