如何根据所有权/权限来 cp 或 rm 文件

如何根据所有权/权限来 cp 或 rm 文件

在遇到垃圾邮件问题后,我停止了postfix

postfix stop

并通过手动检查mailq发现了数十万条未发送的垃圾邮件。

垃圾邮件是从本地托管的网站之一发送的,我知道自从我停止外发邮件以来,该用户没有尝试发送任何电子邮件。

因此,来自我计算机上该用户的所有消息/var/spool/postfix/maildrop都被认为是垃圾邮件,我想将它们删除或移动到另一个目录以供以后调查。

我想移动给定所有者的所有文件(在本例中为用户“web2”)

/var/spool/postfix/maildrop

/var/spool/postfix/temp-spam

我怎样才能做到这一点?

答案1

您可以使用findxargs,例如:

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

您也可以在不生成xargsusing 的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多次)。

选项-tmvGNU (Linux/Cygwin) 扩展。在没有它的系统上,您需要先传递要移动的文件名,然后传递目标。该-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 {} +

(使用中间 shell 按所需顺序获取参数)

如果您使用 zsh,则可以使用它的全局限定符执行与 相同的工作find。此处,u用于匹配用户拥有的文件的标志。

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

(与find上面的命令不同,这不会递归到子目录。这里不需要它,但如果您需要它,请**/在路径中插入“零个或多个子目录”,例如/var/spool/postfix/maildrop/**/*(u:web2:)。)

相关内容