我想创建一个 cronjob,复制 /var/log 中的每个文件,并将其放入 /etc/bak。我通过创建一个 sh 文件来做到这一点,该文件说
cp /var/log/*.* /etc/bak
我希望这些文件不会被覆盖,而是保持唯一。为此,我认为我应该在文件名中添加日期/时间。有没有办法在批量文件复制中实现这一点?
答案1
如何将每一批日志文件放在单独的目录中?你可以这样做:
dir=/etc/bak/`date "+%Y-%m-%d_%H.%M.%S"`
mkdir "$dir"
cp /var/log/*.* $dir
如果您想在所有复制的文件前面加上时间戳,您可以执行以下操作:
(cd /var/log && ls -1 *.*) | awk -v date=`date "+%Y-%m-%d_%H.%M.%S"` '{ print "cp /var/log/" $0 " /etc/bak/" date $0}' | sh
答案2
要将文件复制到另一个目录并在过程中更改其名称,我建议使用 for 循环。
以下代码使用 提取文件的名称basename
,然后创建该文件的副本,其/etc/bak
名称与原始文件相同,并附加日期。
for file in /var/log/*; do
bn=$(basename $file)
cp $file /etc/bak/${bn}.$(date +%F)
done