我试图清除一些垃圾邮件,但遇到了一个问题。队列中的文件数量太大,我通常的命令无法处理。它会给我一个关于太多参数的错误。
我通常这样做
grep -i user@domain.com 1US* | awk -F: '{print $1}' | xargs rm
Run Code Online (Sandbox Code Playgroud)
1US* 可以是 1US[a-zA-Z] 之间的任何值。我唯一能做的就是运行这个可怕的装置。它的一个文件,包含 1USa、1USA、1USb 等,贯穿整个字母表。我知道他们必须是一种更有效地运行它的方法。
grep -s $SPAMMER /var/mailcleaner/spool/exim_stage1/input/1USa* | awk -F: '{print $1}' | xargs rm
grep -s $SPAMMER /var/mailcleaner/spool/exim_stage1/input/1USA* | awk -F: '{print $1}' | xargs rm
Run Code Online (Sandbox Code Playgroud)
运行多个 grep 实例。代替
grep -i user@domain.com 1US* | awk '{...}' | xargs rm
Run Code Online (Sandbox Code Playgroud)
做
(for i in 1US*; do grep -li user@domain "$i"; done) | xargs rm
Run Code Online (Sandbox Code Playgroud)
请注意 -l 标志,因为我们只需要匹配的文件名。这将加快 grep 的速度(在第一次匹配时终止)并使您的 awk 脚本不再需要。这可以通过检查 grep 的返回状态并调用 rm 来改进,而不是使用 xargs (xargs 非常脆弱,IMO)。如果您要求,我会给您更好的版本。
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
14061 次 |
| 最近记录: |