我尝试设置一个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