내 메일은/var/mail/file에 저장됩니다.메일 파일의 각 메시지에 대한 루프
나는 각 메시지를 loopfor 할 bash 스크립트를 작성하고 싶다. 파일에서 메시지를 분할하는 방법을 모르겠습니다.
감사
내 메일은/var/mail/file에 저장됩니다.메일 파일의 각 메시지에 대한 루프
나는 각 메시지를 loopfor 할 bash 스크립트를 작성하고 싶다. 파일에서 메시지를 분할하는 방법을 모르겠습니다.
감사
편집 : "당신은 모두가 망치는 경우, 모든 손톱 모양"의 전형적인 예; procmail 메일 처리 패키지의 formail
을 twalberg과 같이 확인하십시오.
sed '/^\n/N;s/^From/\x0&/' /var/mail/targetMailbox
예를 들어 당신이이 명령과 split
를 사용할 수 있습니다
신속하고 더러운 뭔가를 들어, 당신은 쉽게 그들을 반복하는 만들 것 NUL 바이트로 기록을 분리하기 위해 다음과 같은 사용할 수 있어야합니다 관리 크기의 여러 파일로 사서함을 분할 :이 명령은 /tmp/
에 자신의 파일에 기록됩니다 100 개의 메시지의 조각으로 사서함을 분할합니다
sed '/^\n/N;s/^From/\x0&/' /var/mail/targetMailbox | split -l 100 -t'\0' - /tmp/mailbox
; 파일 분할에 관심이 있다면 split
의 옵션을 확인하십시오. 이렇게하려면 여러 가지 방법이 있습니다.
(? 최근) GNU 도구의 많은 예를 들어, 그들이 NUL
으로 단락 지어진 레코드를 처리 할 수있는 -0
또는 -z
옵션이 있습니다 :
-z
에 대한 grep
, head
및 tail
-0
에 대한 xargs
bash
에서 직접 반복하려면 eas 나는 while read
루프를 사용하여 read
의 -d
옵션을 사용하여 NUL을 구분 기호로 사용하도록 지정합니다.
더 영구적 인 해결책을 얻으려면 기존 mbox
파서를 사용하는 방법을 찾아야합니다.
이것은 어떤 메일에서는 실패 할 것이고, 메일 본문에서'From'가 뒤 따르는 줄 바꿈은 두 메일 사이의 분리로 간주 될 것이라고 생각합니다 메일. 이것을 피할 수는 있지만 (헤더는 EOL에서 끝나지 만 메일 본문에서 EOL을 찾을 수는 없다고 생각합니다.) 본격적인 파서를 사용하는 것이 이런 종류의 코너 케이스에 대한 최선의 해결책 일 수 있습니다. 틀림없이 실종 됐어. – Aaron
학습 연습입니까? 이 접근법을 사용하는 이유는 무엇입니까? – MattH
파일이 너무 커서 popa3d에서 오류가 발생합니다 – Bob5421
사용자가 파일을 어떻게 분할하려고하는지 명확하게 설명하지 않았습니다. –