이메일 본문에 포함하여 보낼 수 있는 파일 세트에서 일반 텍스트 타르볼을 생성하는 도구를 찾고 있습니다.

이메일 본문에 포함하여 보낼 수 있는 파일 세트에서 일반 텍스트 타르볼을 생성하는 도구를 찾고 있습니다.

타르볼을 가져와서 압축을 풀고 압축을 푼 다음 내용을 일반으로 처리할 수 있도록 최대 80자 너비의 줄로 구성된 연속 파일로 변환하는 명령줄 도구를 찾고 있습니다. 텍스트는 손상 없이 메일로 전송됩니다. .

그러한 도구를 알려주셔서 감사합니다.

감사해요.

답변1

대답은 다음과 같습니다. 원하는 대로 수행할 수 있습니다.

tar xf tarball-test.tar.gz --to-stdout | fold -w 80 -s > output.txt 

# alternative: 

tar zxOf tarball-test.tar.gz | fold -w 80 -s > output.txt 

이 예에서는 GNU를 사용하고 있지만 tar위의 만트라 중 하나가 다른 tar구현에서도 작동할 것입니다.

fold-s옵션은 공백(있는 경우)에서 중단됩니다 .이 Q&A 보기대안 및 옵션 fold.

일부 파일을 생성하고 타르볼을 만들어 이를 테스트할 수 있습니다:

$ for i in {1..25}; do printf 'file1' >> file1.txt; done
$ for i in {1..30}; do printf 'xxfile2' >> file2.txt; done
$ for i in {1..20}; do printf 'file3 ' >> file3.txt; done
$ tar -czf tarball-test.tar.gz file1.txt file2.txt file3.txt

위에서 생성된 파일에는 개행 문자가 포함되어 있지 않습니다. 이는 드문 일이지만 OP 문서에 대해 가정하고 싶지 않습니다. 그러나 이러한(구분되지 않은) 파일을 사용하면 fold정의되지 않은 동작이 발생합니다. 그렇지 않은 경우 이러한 위험을 방지하려면 아래와 같이 줄바꿈이 포함된 파일을 생성하세요.

$ for i in {1..25}; do printf 'file1' >> file1.txt; done; printf '\n' >> file1.txt
$ for i in {1..30}; do printf 'xxfile2' >> file2.txt; done; printf '\n' >> file2.txt
$ for i in {1..20}; do printf 'file3 ' >> file3.txt; done; printf '\n' >> file3.txt
$ tar -czf tarball-test.tar.gz file1.txt file2.txt file3.txt

답변2

요청한대로 저장됩니다.concat_mailer.sh

#!/bin/bash

# extract .tar file containing .txt--merge, format, e-mail

time_stamp=$(date +"%Y-%m-%d_%H:%M:%S")
cat_file="concat_[$time_stamp]"

tar -x -f "$1"

# create single plain text file
for text in *.txt
 do
  cat "$text" >> "$cat_file.txt"
 done

# delimited text captured for output
cat "$cat_file.txt" | fold -w 80 > temp.txt

mv history.log to_append.txt
echo -e "[ "$time_stamp" ] "$1"\n" > history.log
cat temp.txt >> history.log
cat to_append.txt >> history.log

# text piped to email body, via stdin
cat temp.txt | msmtp -a default -t [email protected]


if [ $? != 0 ]; then
    echo -e "\n\033[31mFailed.\033[m\n"
else
    echo -e "\n\033[32mSuccess.\033[m\n"
fi

rm *.txt

exit 0

이 명령을 실행하십시오(스크립트를 실행 가능하게 만드십시오):
chmod +x concat_mailer.sh
이 명령은 한 번만 수행하면 됩니다.

사용법: ./concat_mailer.sh your_file.tar
Fedora 38에서 테스트되었습니다. 명령을 실행하는

것은 mail예상보다 어려웠습니다.
결국 이 도우미 스크립트를 만들었습니다.msmtp 여기.

mail&& 의 경로를 확인하려면 다음 명령을 입력하십시오 sendmail.msmtp

whereis mail; whereis sendmail; whereis msmtp

sendmail것은 에 있습니다 /usr/sbin/. 그것은 차이를 만듭니다. 해당 경로를 개별적으로 변경합니다.

sudo ln -f -s /usr/sbin/sendmail /usr/bin/mail

sudo ln -f -s /usr/bin/msmtp /usr/sbin/sendmail

이제 mail&가 MTP 서비스 sendmail로 사용됩니다 .msmtp

관련 정보