메일을 찾아서 PHP로 전송한 후 삭제하세요.

메일을 찾아서 PHP로 전송한 후 삭제하세요.

파일로 파이프되는 데이터베이스의 내용을 저장하는 스크립트가 있습니다.

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

Maildir에서 모든 파일을 찾아 PHP 스크립트로 파이프한 다음 그 이후의 각 파일을 삭제하려면 쉘 스크립트 또는 oneliner가 필요합니다.

각 파일을 찾아 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

관련 정보