删除包含许多文件的文件夹中包含“some text”的文件(100k +)

时间:2015-11-20 23:31:44

标签: grep find exec rm

我正在尝试删除系统为搜索机器人创建的会话文件。这次上次工作不起作用,我猜是因为会话文件的数量增加了。

我正在使用grep -l 'spider' * | xargs rm

但现在我从Argument list too long收到grep错误。

我是否可以通过findgrep使用rm来完成此操作?

编辑:

没有文件中有空格。

我在想,由于grep无法处理文件数量,我可能会使用find来管理大量文件,因为我认为(可能不正确){{1}使用findexec会自动将文件分解为可管理的块。但也许这不起作用。

不过,不管怎样,我真的需要删除这些文件!

编辑:

我真的无法解决这个问题。我删除了旧文件,直到文件计数足够小,我可以运行它:

{}

然后我每隔几分钟设置一个cron来运行命令。我现在能够延长会话的生命周期,因为cron的频率意味着运行grep -l "spider" * | xargs rm 命令的文件更少。

2 个答案:

答案 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来引用名称。