파일에서 모든 Base64 청크를 제거합니다.

파일에서 모든 Base64 청크를 제거합니다.

약 20년 동안의 유즈넷 아카이브를 archive.org에 업로드하려고 하는데 일부 아카이브에 Base64로 인코딩된 트로이 목마가 포함되어 있기 때문에 첫 번째 아카이브 배치가 거부되고 있습니다. 처리할 파일이 400GB 정도 있어서 수동 복구는 불가능합니다. 모든 파일은 일반 텍스트인 mbox 형식입니다. 내 첫 번째 생각은 mbox 파일에서 "Content-Type: application/x-msdownload"를 포함하는 모든 메시지를 찾아서 바꾸는 것이었습니다. 이것은 꽤 어려울 수 있습니다. 이제 더 쉬운 무차별 접근 방식은 모든 Base64 청크를 제거하는 것이라고 생각합니다.

~에서이 문제, grep을 사용하여 base64 청크를 찾을 수 있다는 것을 알았지만 sed를 사용하여 동일한 것을 설정하는 방법을 모르기 때문에 질문하는 것입니다. 감사해요!

편집 : 지금까지 시도한 것

이에 따르면페이지, ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$base64 텍스트를 찾는 데 필요한 정규식으로 추정되지만 sed와 함께 사용하려고 하면 실제로 작동하지 않거나 적어도 예상했던 것과는 다릅니다.

예:

cat clari.local.california.sfbay.biz.mbox | sed -e '#^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$#d' > clari.local.california.sfbay.biz.mbox.test

clari.local.california.sfbay.biz.mbox.test에는 여전히 base64 텍스트가 포함되어 있습니다.

답변1

MUA( 메일 사용자 에이전트 mutt)는 MIME 유형별로 메일함에서 메시지를 삭제할 수 있습니다. 이를 스크립트로 작성할 수도 있습니다.

인코딩된 첨부 파일이 있는 메시지는 mutt검색 표현식과 일치될 수 있습니다 ~M application. 이는 application일반적으로 첨부 파일이 인코딩되었음을 나타내는 MIME 유형 string 을 포함하는 모든 메시지와 일치합니다 (base64 가능). application/x-msdownload원하는 경우 분명히 더 구체적인 것을 사용할 수 있습니다.

사서함이 호출되면 messages.mbox다음과 같이 명령줄 문자열이 포함된 첨부 파일이 포함된 모든 메시지를 삭제할 수 있습니다.application

mutt -e 'push <delete-pattern>"~M application"<enter><quit>"y"' -f messages.mbox

사서함에서 메시지를 삭제하기 전에는 확인 메시지가 표시되지 않습니다(마지막은 "y"종료하기 전에 메시지를 삭제할지 여부에 대한 질문에 대한 답변입니다). mutt메시지를 별도의 편지함으로 이동할 수 있습니다.

mutt -e 'push <tag-pattern>"~M application"<enter><tag-prefix><save-message>bad.mbox<enter>"y"<quit>"y"' -f messages.mbox

이는 지정된 검색 표현식과 일치하는 모든 메시지를 표시하여 메일함에 저장하고 bad.mbox원본 메일함에서 삭제한 후 종료됩니다.

답변2

procmail, formail, 를 보세요 mimencode. 이를 사용하여 복잡한 자동 메일함 처리를 쉽게 설정할 수 있습니다.

mbox 파일에서 "Content-Type: application/x-msdownload"가 포함된 모든 메시지를 찾아 바꿉니다.

답변3

(?:...)표준 POSIX 정규식의 일부가 아닌 Perl 정규식의 일부입니다. grep -EOR 에 해당하는 ERE는 다음과 sed -E같아야 합니다.

^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$

바라보다내 정규 표현식이 X에서는 작동하지만 Y에서는 작동하지 않는 이유는 무엇입니까?

정규 표현식은 다음과 같은 줄과도 일치합니다.어느길이가 4자의 배수(다른 문자 없음)인 영숫자 문자열입니다. 따라서 한 줄에 있는 4글자 욕설이나 4글자 인사말만 일치합니다 question. congrats또한 양쪽 끝에 공백을 허용하지 않으며 개별 줄만 삭제하면 남은 내용이 의미가 없는 메시지를 받을 수 있습니다.

어쨌든, 이와 같은 작업을 수행할 수 있으며, 이를 위해서는 각각 4개의 문자로 구성된 그룹이 5개 이상 필요합니다. 이는 임의의 단어와 일치할 가능성이 낮아야 합니다.

^([A-Za-z0-9+/]{4}){5,}([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$

관련 정보