I have a folder in my server which contains some files. These are automated that means everyday we get new files automatically which will overwrite the old ones. So want to take a back up for this data. How can i copy all these files in to a another folder by renaming the files with current date while copying.
ex : i have a folder named folder1 which contains 4 files. path for this folder is home/install/project1/folder1
aaa.dat
bbb.dat
ccc.dat
ddd.datnow i want to copy all these four files in to a different folder named folder2. path for this folder is home/install/project1/folder2. while copying these files i want to rename each file and add the current date to the file. so my file names in folder2 should be..
aaa091012.dat
bbb091012.dat
ccc091012.dat
ddd091012.datI want to write a Linux shell script for this. Please give me some idea or some sample scripts related to this.
3 Answers
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 5 You can do it in 2 steps, first cp:
cp -rp source/ target/Then use rename. But you should use Ubuntu flavor of it, which is actually Perl script. For Redhat, you might be able to install or download it from . Unfortunately, native Redhat/Fedora rename does not support Perl regular expressions and will not work for this.
At any rate, use Perl-ish rename like this:
cd target
rename 's/\.dat$/ *You can even use it recursively by combining it with find and xargs, something like:
find | xargs rename 's/\.dat$/ this worked for me:
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