電子メール本文に含めて、送信できるファイルセットからプレーンテキストのタールボールを生成するツールを探しています。

電子メール本文に含めて、送信できるファイルセットからプレーンテキストのタールボールを生成するツールを探しています。

タールボールをインポートして解凍し、解凍してから内容を一般的に処理できるように、最大​​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上記のマントラの1つは他の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&&のパスを確認するには、次のコマンドを入力しますsendmailmsmtp

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

関連情報