6

スパムメールを一掃しようとしていたところ、問題が発生しました。キュー内のファイルの量が多すぎて、通常のコマンドでは処理できませんでした。引数が多すぎるというエラーが発生します。

私は通常これを行います

grep -i user@domain.com 1US* | awk -F: '{print $1}' | xargs rm

1US* は 1US[a-zA-Z] の間の任意の値です。私が機能させることができたのは、この恐ろしい仕掛けを実行することだけでした。アルファベット全体で 1USa、1USA、1USb などの 1 つのファイル。私は彼らがこれをより効率的に実行する方法でなければならないことを知っています.

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
4

5 に答える 5

2

find名前がパターン「1US」で始まるすべてのファイルを検索するために使用できます。次に、出力を xargs にパイプして、引数リストが大きくなりすぎないようにし、grep 呼び出しを処理します。xargs のファイル名を区切るためにヌルバイトを使用したことに注意してください。これにより、問題のあるファイル名の問題が回避されます。;)

find -maxdepth 1 -name '1US*' -printf '%f\0' | xargs -0 grep -u user@domain | awk ...
于 2013-04-18T15:22:06.050 に答える
1

への-exec引数findはここで役に立ちます。私自身も同様の状況でこれを使用しました。

例えば

# List the files that match
find /path/to/input/ -type f -exec grep -qiF spammer@spammy.com \{\} \; -print
# Once you're sure you've got it right
find /path/to/input/ -type f -exec grep -qiF spammer@spammy.com \{\} \; -delete
于 2013-04-18T15:53:28.623 に答える