查找邮件,将其传送到 php,然后删除

查找邮件,将其传送到 php,然后删除

我有一个脚本,可以保存到通过管道传输到该文件的数据库内容。

cat /mailpath/Maildir/cur/mailfile | php -q /scriptpath/mailPipe.php

我需要一个 shell 脚本或 oneliner 来查找 Maildir 中的所有文件,将它们通过管道传输到 php 脚本,然后删除之后的每个文件。

我知道如何查找每个文件并将其通过管道传递给 PHP

find /mailpath/Maildir/cur/ -type f -printf "cat %p | php -q /scriptpath/mailPipe.php\n" | sh

但不知道之后如何删除文件——我不想尝试rm

PS如果有人需要类似的脚本:https://github.com/stuporglue/mailreader

答案1

该命令应该会失败,因为 -delete 在 exec 之前执行,并且在任何情况下您的脚本仅从 stdin 读取输入。

find /mailpath/Maildir/cur/ -type f -delete -exec php -q /scriptpath/mailPipe.php {} \;

我现在向您推荐这个: find . -type f -exec sh -c "php -q /scriptpath/mailPipe.php < '{}'" \; -delete

哪个产生这个:

for i in `seq -w 1 10`; do echo $i > nonce-$i; done; ls 
nonce-01  nonce-02  nonce-03  nonce-04  nonce-05  nonce-06  nonce-07  nonce-08  nonce-09  nonce-10

执行查找:

find . -type f -exec sh -c "wc -l < '{}'" \; -delete ; ls
1
1
1
1
1
1
1
1
1
1

你能尝试一下吗? (之前备份/mailpath/Maildir/cur/)

这是一个全功能命令,无需将 find 与其他命令进行管道连接,这可能会造成相当混乱。

更好的是,如果 sh 返回错误,那么它根本不会删除文件,find 中命令的顺序是相关的。

我也真的建议你读一下这篇文章http://mywiki.wooledge.org/UsingFind

相关内容