所有権/権限に基づいてファイルをcpまたはrmする方法

所有権/権限に基づいてファイルをcpまたはrmする方法

スパムの問題が発生した後に停止しました。postfix

postfix stop

そして、手動検査によってmailq何十万もの未送信のスパムメッセージが発見されました。

スパムはローカルのホスティングサイトの1つから送信され、私がメールの送信を中止した後にユーザーが電子メールを送信しようとしなかったことを知っています。

したがって、私のコンピュータ上のこのユーザーからのすべてのメッセージは/var/spool/postfix/maildropスパムと見なされ、後で調査するためにそのメッセージを削除するか、別のディレクトリに移動したいと思います。

私の考えでは特定の所有者のすべてのファイルを移動する(この場合、ユーザー "web2")~から

/var/spool/postfix/maildrop

到着

/var/spool/postfix/temp-spam

どうすればいいですか?

答え1

findたとえば、次のようにして使用できますxargs

find /var/spool/postfix/maildrop -user web2 -print0 -type f | xargs -0 -I{} mv {} /var/spool/postfix/temp-spam

以下を挿入してテストできますecho

find /var/spool/postfix/maildrop -user web2 -print0 -type f | xargs -0 -I{} echo mv {} /var/spool/postfix/temp-spam

答え2

xargsを使用して作成せずにfindこれを行うこともできます-exec

find /var/spool/postfix/maildrop -user THEUSER -type f -exec mv {} /var/spool/postfix/temp-spam \;

移動されたファイルを表示するには、-execコマンドに追加のコンテンツを追加できます。

find /var/spool/postfix/maildrop -user THEUSER -type f -exec ls -lah {} \; -exec mv {} /var/spool/postfix/temp-spam \;

答え3

標準コマンドfindメタデータ(名前、権限など)に基づいてファイルを照合して操作できます。ディレクトリを再帰的に巡回します。デフォルトのfind構文の後には、検索するディレクトリ、一致基準、およびオプションで実行するコマンドが続きます(指定されたコマンドがない場合は、一致するfind名前が印刷されます)。

find /var/spool/postfix/maildrop -user web2 -exec mv -t /var/spool/postfix/temp-spam {} +

mv -t /var/spool/postfix/temp-spam …これにより、一致するファイルのコマンドが実行されます。{}一致するすべてのファイルのリストに置き換えられます(リストが長すぎると複数回find実行されます)。mv

オプションはGNU(Linux / Cygwin)拡張-tです。mvそのファイルがないシステムでは、最初に移動したいファイル名を渡してから宛先を渡す必要があります。この-exec … +操作では、コマンドラインの末尾にファイル名を渡すことしかできないため、別の方法を使用する必要があります。

find /var/spool/postfix/maildrop -user web2 -exec mv {} /var/spool/postfix/temp-spam \;

mvファイルごとに別々に呼び出されます)

find /var/spool/postfix/maildrop -user web2 -exec sh -c 'mv "$@" "$0"' /var/spool/postfix/temp-spam {} +

(中間シェルを使用して目的の順序でパラメータを取得します。)

zshを使用している場合は、次のものを使用できます。グローバル予選と同じことを行いますfind。ここではu、ユーザーが所有するファイルを照合するために使用されるフラグです。

mv /var/spool/postfix/maildrop/*(u:web2:) /var/spool/postfix/temp-spam

find上記のコマンドとは異なり、サブディレクトリに再帰的には入りません。ここでは必要ありませんが、必要に応じてパスに**/「0個以上のサブディレクトリ」を挿入します。/var/spool/postfix/maildrop/**/*(u:web2:)

関連情報