我有一个包含几个.db
文件的文件夹,我正在尝试创建一个复制每个*.db
文件但将当前日期添加到文件的shell脚本
例如,该文件夹包含A.db
,B.db
,C.db
。我希望它将A.db
复制到/Backups/A_2016_07_21.db
,依此类推。
我知道我可以cp -a A.db /Backups/A.db
但我正在寻找一种更自动化的方法来为每个*.db
文件执行此操作并添加当前日期
答案 0 :(得分:4)
使用for
构造和cp
文件将文件迭代到目的地,并使用bash
参数展开和date
获取所需的文件名:
for f in *.db; do cp -a "$f" /Backups/""${f%.db}"_$(date '+%Y_%m_%d').db"; done
答案 1 :(得分:0)
您可以使用一行进行循环。
for file in $( ls /dir/*.db ); do cp $file /Backups/$( echo $file | cut -d. -f1 )_$( date +%Y_%m_%d ).$( echo $file | cut -d. -f2 ); done
分解: 对于$(ls /dir/*.db)中的文件 - 列出所有.db文件
cp $ file - 复制文件(非常明显)
/ Backups / $(echo $ file | cut -d.-f1) - 提取文件名的第一部分。例如A.db - >甲
$(日期+%Y %m_%d) - 打印日期,前面有下划线。
。$(echo $ file | cut -d.-f2) - 最后提取文件名的最后一部分,前缀为"。"