メールを見つけてPHPに送信して削除します。

メールを見つけてPHPに送信して削除します。

ファイルにパイプされるデータベースの内容を格納するスクリプトがあります。

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

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

execの前に-deleteが実行され、いずれの場合でも、スクリプトは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

おすすめ記事