Linux Shell script to copy files from one location to another location

0

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.dat

now 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.dat

I want to write a Linux shell script for this. Please give me some idea or some sample scripts related to this.

G M Ramesh

Posted 2013-03-04T05:44:06.540

Reputation: 103

@JimGarrison, i tried this command...$ mv /directory_one/* /directory – G M Ramesh – 2013-03-04T05:47:57.197

@JimGarrison, for unix shell , i know the script how to copy files but for linux i dont know... if the unix commands works for linux also then its ok. i can make it out... – G M Ramesh – 2013-03-04T05:49:19.727

298% of Unix commands have identical or very similar counterparts in Linux. – Ex Umbris – 2013-03-04T05:52:16.760

@GMRamesh: which linux flavor are you using? Ubuntu? – mvp – 2013-03-04T05:54:44.360

I am using Red Hat – G M Ramesh – 2013-03-04T05:57:28.997

@JimGarrison, thank u Jim... i will check that command now – G M Ramesh – 2013-03-04T05:58:10.463

Answers

2

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

maverick

Posted 2013-03-04T05:44:06.540

Reputation: 136

1There are a few problems with that script; most notably, $srcfile will actually just be equal to $srcdir. – ruakh – 2013-03-04T06:19:25.607

Good catch @ruakh, editing now – maverick – 2013-03-04T06:20:12.990

Just add a note that this script would not copy any files present in sub-directories of srcdir to ensure it is what OP expects. – Tuxdude – 2013-03-04T06:21:33.787

Now $dstfile will be e.g. home/install/project1/folder1/aaa091012.dat, so $dstdir/$dstfile will be e.g. home/install/project2/folder2/home/install/project1/folder1/aaa091012.dat. – ruakh – 2013-03-04T06:23:21.700

Nice, @ruakh - edited again – maverick – 2013-03-04T06:26:01.030

1

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 https://metacpan.org/module/rename. 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$/091012.dat/' *

You can even use it recursively by combining it with find and xargs, something like:

find | xargs rename 's/\.dat$/091012.dat/'

mvp

Posted 2013-03-04T05:44:06.540

Reputation: 3 705

0

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

G M Ramesh

Posted 2013-03-04T05:44:06.540

Reputation: 103