24時間ごとにログファイルを電子メールで送信しようとしています。現在、私はこれを達成するためにmuttを使用しています。次のようにmuttを呼び出すことができます。
mutt -s "Log" -a file_attachment [email protected]
findとmtimeを使用して最近生成されたファイルを一覧表示できることを知っていますが、ディレクトリ内の最後に生成されたファイルを見つけて電子メールの添付ファイルに送信するbash機能を定義できるようにしたいと思います。
どうすればいいですか?
答え1
そしてzsh
:
mutt -s "Log" -a /path/to/*.log(.om[1]) [email protected]
その使用zsh
グローバル予選。他のシェル glob は名前に基づいてのみファイル名を生成できますが、glob ではこれらの修飾子(上記zsh
)(.om[1])
を使用してファイル属性(タイプ、サイズ、時間、権限...)または他の基準に基づいて選択してファイルに影響を与える可能性があります。さまざまなバリエーションや選択範囲を適用して順序を決めます。
この場合、次の修飾子を使用します。
.
:一般ファイルのみを選択します。om
:修正時間順に並べ替え(最新順)[1]
:最初の項目のみを選択します。
log
globにファイルがないと、/path/to
globは失敗し、コマンドは中断されます(予想どおりですが、他のシェルは動作が異なります)。
GNUlyでは、これに対応する内容は次のとおりです。
latest=$(
find /path/to -maxdepth 1 -name '*.log' -printf '%T@:%p\0' |
sort -rzg | sed -z 's/^[^:]*://;q'
)
[ -n "$latest" ] &&
mutt -s "Log" -a "$latest" [email protected]
答え2
Get_Attachment_Name ()
{
file_attachment_dir="Whatever you want your directory to be"
file_attachment=`ls -lrt -- "$file_attachment_dir" | grep -v "^[bcdl]"| tail -n 1 | awk '{print $9}'`
}
b、c、d、またはlで始まる出力行を削除すると、ブロック特殊ファイル、文字特殊ファイル、ディレクトリ、またはシンボリックリンクを送信しようとする試みが削除されます。
man ls
出力から除外できる他のファイル形式を確認してください。