ディレクトリから最新の更新ファイルを選択し、電子メールで送信します。

ディレクトリから最新の更新ファイルを選択し、電子メールで送信します。

特定のディレクトリで最新のエラー(タイムスタンプ).logファイルを選択して、電子メールで添付ファイルに送信したいと思います。私が試していることは次のとおりです。

ファイル名: abc.sh

echo 'An error occured' | mutt -s "Logs" -a '/xx/xx/logs/xx/*.log(.om[1])' -e 'my_hdr From:[email protected]' -- [email protected]

ベストアンサー1

シンプルなソリューション

私はあなたのログファイル名がglobと一致し、/xx/xx/logs/xx/*.logあなたが次のアドレスにメールを送信したいと仮定します。[email protected]

newest=$(ls -rt /xx/xx/logs/xx/*.log | tail -n 1)
echo 'An error occured' | mutt [email protected] -s "Logs" -a "$newest"

この方法は、ファイル名が良い場合に機能します。ただし、通常、解析された出力lsは信頼できません。

より安定したソリューション

これは使用を避け、lsすべてのファイル名に対して安全です。

inode=$(find /xx/xx/logs/xx/ -maxdepth 1 -type f -iname '*.log' -printf '%T@ %i\n' | sort -rn | awk '{print $2;exit;}')
newest=$(find /xx/xx/logs/xx/ -maxdepth 1 -inum "$inode")
echo 'An error occured' | mutt [email protected] -s "Logs" -a "$newest"

どのファイルが選択されたかをテストする

電子メールで送信せずにどのファイルが最新であるかを確認するには、次の手順を実行します。

inode=$(find /xx/xx/logs/xx/ -maxdepth 1 -type f -iname '*.log' -printf '%T@ %i\n' | sort -rn | awk '{print $2;exit;}')
newest=$(find /xx/xx/logs/xx/ -maxdepth 1 -inum "$inode")
echo "newest file is $newest"

おすすめ記事