我的服务器中有一个文件夹,里面有一些文件。这些文件是自动生成的,这意味着我们每天都会自动获取新文件,这些新文件将覆盖旧文件。因此,我想备份这些数据。如何在复制时使用当前日期重命名文件,从而将所有这些文件复制到另一个文件夹中。
例如:我有一个名为 folder1 的文件夹,其中包含 4 个文件。此文件夹的路径为 home/install/project1/folder1
aaa.dat
bbb.dat
ccc.dat
ddd.dat
现在我想将这四个文件全部复制到名为 folder2 的另一个文件夹中。此文件夹的路径为 home/install/project1/folder2。复制这些文件时我想重命名每个文件并将当前日期添加到文件中。因此,folder2 中的文件名应该是..
aaa091012.dat
bbb091012.dat
ccc091012.dat
ddd091012.dat
我想Linux
为此编写一个 shell 脚本。请给我一些想法或与此相关的一些示例脚本。
答案1
srcdir="home/install/project1/folder1"
dstdir="home/install/project1/folder2"
d=$(date +%m%d%y)
for srcfile in ${srcdir}/*
do
dstfile=$(basename $srcfile)
dstfile=${dstfile/\./${d}\.}
cp $srcfile $dstdir/$dstfile
done
答案2
您可以分两个步骤完成,首先cp
:
cp -rp source/ target/
然后使用rename
。但你应该使用 Ubuntu 版本,它实际上是 Perl 脚本。对于 Redhat,你可以从以下位置安装或下载它:https://metacpan.org/module/rename。不幸的是,原生 Redhat/Fedora 重命名不支持 Perl 正则表达式,因此无法实现此功能。
无论如何,rename
像这样使用 Perl-ish:
cd target
rename 's/\.dat$/091012.dat/' *
find
您甚至可以通过将其与和组合来递归使用它xargs
,例如:
find | xargs rename 's/\.dat$/091012.dat/'
答案3
这对我有用:
cd home/install/project1/folder1
for f in *.dat
do
cp -v $f /home/install/project1/folder2/${f%.dat}$(date +%m%d%y).dat
done