Linux Shell脚本将文件从一个位置复制到另一个位置

Linux Shell脚本将文件从一个位置复制到另一个位置

我的服务器中有一个文件夹,里面有一些文件。这些文件是自动生成的,这意味着我们每天都会自动获取新文件,这些新文件将覆盖旧文件。因此,我想备份这些数据。如何在复制时使用当前日期重命名文件,从而将所有这些文件复制到另一个文件夹中。

例如:我有一个名为 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

相关内容