我有一个脚本,可以保存到通过管道传输到该文件的数据库内容。
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