Cron 查找 exec cp 并重定向输出,每行包含时间/日期?

Cron 查找 exec cp 并重定向输出,每行包含时间/日期?

我尝试设置一个cron任务来运行一组基本的 shell 命令。

我需要查看最后一天创建的所有文件,然后复制到另一个文件夹并生成一个日志,逐行说明文件复制操作的日期和时间。

这两个 shell 命令单独运行,但需要创建一个并通过 进行调度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行将替换STDOUT为指定的命令,并且该find行将执行复制操作并将输出STDOUT替换为您的日志记录命令。

我认为您想要实现一次填充两个日志文件。一个带有复制命令的输出,另一个带有日期前缀。为此,您可以使用该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

相关内容