Grep 删除包含“";“一些文本”;在包含多个文件的文件夹中(100k+;)

Grep 删除包含“";“一些文本”;在包含多个文件的文件夹中(100k+;),grep,find,exec,rm,Grep,Find,Exec,Rm,我正在尝试删除系统为搜索机器人创建的会话文件。上次有效的东西这次不起作用,我想是因为会话文件的数量增加了 我使用的是grep-l'spider'*| xargsrm 但是现在我从grep得到了一个参数列表太长错误 是否有某种方法可以使用find和grep和rm来完成此任务 编辑: 所有文件中都没有空格 我在想,既然grep无法处理文件数量,我可能会使用find来管理大量文件,因为我认为(可能是错误的)使用exec和{}的find会自动将文件分成可管理的块。但这可能行不通 无论如何,我真的需要删除

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

我使用的是
grep-l'spider'*| xargsrm

但是现在我从
grep
得到了一个
参数列表太长
错误

是否有某种方法可以使用
find
grep
rm
来完成此任务

编辑:

所有文件中都没有空格

我在想,既然
grep
无法处理文件数量,我可能会使用
find
来管理大量文件,因为我认为(可能是错误的)使用
exec
{}
find
会自动将文件分成可管理的块。但这可能行不通

无论如何,我真的需要删除这些文件

编辑:

我没能解决这个问题,真的。我删除了较旧的文件,直到文件数量足够小,我可以运行以下操作:

grep -l "spider" * | xargs rm

然后我设置了一个cron,每隔几分钟运行一次命令。我现在能够延长会话生命周期,因为cron的频率意味着运行
rm
命令所需的文件更少。

您可以使用
-n
限制xargs传递给其命令的参数量,其中
n
是参数数

您可以尝试不同的N值

xargs -n 500 rm
您还可以查看以下各项是否适用于您的系统以确定限制

xargs --show-limits
如果需要使用grep查看文件名,可以链接这些命令

find . -type f | xargs -n 500 grep -l "spider" | xargs -n 500 ...
另一种避免命令行限制的删除文件的方法(不过,在这种情况下不起作用,因为过滤器在文件中,而不是在文件名中)


另一个想法是构建
rmxxx
语句并通过管道连接到
sh

grep -l 'spider' * |sed 's/^/rm /'|sh

您可以先删除
|sh
以检查命令是否正常。另外,如果文件名中有空格,您可能希望通过稍微扩展
sed
来引用名称。

不是rm抱怨参数的数量吗?您正在删除的文件是否有任何共同的文件名模式?有什么方法可以避免查看每个文件的内容吗?@aguibert目前没有模式。文件名是会话哈希。无法区分人工会话哈希和机器人会话哈希。但也许将来我可以修改会话创建代码,并专门命名bot会话文件。我尝试了
-n50000
-n5000
,但grep仍在抱怨。我敢肯定它上次处理的文件远远超过5000个。还要注意的是,你的
查找
无法工作,因为它正在查找文件名。我需要删除包含文本“spider”的文件。
find
命令执行其他操作。它检查的是文件名,而不是文件内容。@Kent是的,我需要删除包含单词“spider”的文件,而不管它们的名称如何。@JRD您是否建议我一次grep 500个文件,直到我检查完所有109000个文件?好像打字太多了,还是不行。问题的基础是grep被
*
覆盖了<代码>-bash:/bin/grep:参数列表太长
grep -l 'spider' * |sed 's/^/rm /'|sh