파일로 파이프되는 데이터베이스의 내용을 저장하는 스크립트가 있습니다.
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