exec cpを探して1行に時間/日付で出力をリダイレクトするCronはありますか?

exec cpを探して1行に時間/日付で出力をリダイレクトするCronはありますか?

cronデフォルトのシェルコマンドセットを実行するジョブを設定しようとしています。

最後の日に生成されたすべてのファイルを表示して別のフォルダにコピーし、ファイルのコピー操作の日時を1行ずつ説明するログを生成する必要があります。

これら2つのシェルコマンドは独立して実行されますがcron。最初のコマンド(find)を増やそうとすると、ジョブはcron実行されず、エラーが発生します。手動で実行すると動作します。

find /dir/ -type f -mtime -1 -exec cp -v -a --parents "{}" /dir2/ \; >> /dir2/LogsCopiaDBs_$(date +%d-%m-%Y).txt
exec &> >(while read line; do echo "$(date +'%h %d %Hh%Mm%Ss') $line" >> /dir2/LogsCopiaDBs.txt; done;)

どんなアイデアがありますか?

ベストアンサー1

この行は異なる順序でなければなりません。

exec &> >(while read line; do echo "$(date +'%h %d %Hh%Mm%Ss') $line" >> /dir2/LogsCopiaDBs.txt; done;)
find /dir/ -type f -mtime -1 -exec cp -v -a --parents "{}" /dir2/ \; >> /dir2/LogsCopiaDBs_$(date +%d-%m-%Y).txt

その行は指定されたコマンドにexec置き換えられ、その行はコピー操作を実行し、出力をロギングコマンドに置き換えます。STDOUTfindSTDOUT

一度に2つのログファイルを埋めたいと思います。 1 つはコピーコマンドの出力で、もう 1 つは日付プレフィックスです。これを行うには、このteeコマンドを使用できます。このteeコマンドがないと、コマンド出力はfind/cp別のログファイルにリダイレクトされ、execコマンドとしてキャプチャされません。このteeコマンドで問題を解決しました。

exec &> >(while read line; do echo "$(date +'%h %d %Hh%Mm%Ss') $line" >> /tmp/LogsCopiaDBs.txt; done;)
find /tmp/ -type f -mtime -1 -exec echo cp -v -a --parents "{}" /tmp/ \; |tee -a /tmp/LogsCopiaDBs_$(date +%d-%m-%Y).txt

おすすめ記事