質問: postfixによって管理されている受信トレイメールの一括削除 数時間前にクライアントのメールアカウントに問題があり、侵害されました。その結果、彼は数十万のスパムを接尾辞でキューに入れ、いくつかの問題を引き起こしました。 1つの「小さな」問題を除いて、すべてが修正され、セキュリティが拘束されています。クライアントの受信トレイには、10万通近くのスパムメールが返送されています。そして明らかに、私はすべてがジャンクではないので、いくつかのフィルタリングを備えたバルク操作を探しています。 pfは、maildirを使用してubuntuサーバーv10.xで実行されます。同じファイルを含むバックアップフォルダーでこのコマンドを試しました。grep -l -r 'undelivered' | xargs rm しかし、それは走ること以外には何もしていないようです。これは、すべての「メール」が次のように名前が付けられたファイル内に保存されているという事実に起因する可能性があります。 1395063807.v902ib2081dm533672.ip.ip.ip:2、
回答: grepのバージョンによっては、引数としてファイル(またはディレクトリ)名を指定していないため、これは永久に待機する場合があります。 -rが指定されているときに現在の作業ディレクトリを使用するgrepの動作は、かなり新しい機能です。したがって、バージョンが古いバージョンの場合、この呼び出しはstdinへの入力を永久に待機する可能性があります。このケースを回避するには、最後の引数として.をgrepに追加するだけです。ファイル名の問題(この場合は問題にならないはずです)を回避するには、電話をかけるのが最も安全です。grep -zl -r 'undelivered' . | xargs -0 rm -- このように、grepは、一致するファイル名をゼロバイト('\0')で区切って出力します。これにより、ファイル名のスペースなどの問題が回避されます。 --は、次の引数をオプションとして扱わないようにrmに指示します。つまり、ファイル名が-で始まる場合、ファイル名は壊れません。このコマンドが何かを実行するかどうかを確認するには、-vオプションをrmに追加して、rmが実際に何かを削除するかどうかを確認できます(もちろん、--の前)。