Script Linux Shell para copiar arquivos de um local para outro local

0

Eu tenho uma pasta no meu servidor que contém alguns arquivos. Estes são automatizados, o que significa que todos os dias recebemos novos arquivos automaticamente, o que substituirá os antigos. Então, quero fazer um backup para esses dados. Como posso copiar todos esses arquivos para uma outra pasta, renomeando os arquivos com a data atual durante a cópia.

ex: eu tenho uma pasta chamada folder1 que contém 4 arquivos. caminho para esta pasta é home / install / project1 / folder1

aaa.dat
bbb.dat
ccc.dat
ddd.dat

agora eu quero copiar todos esses quatro arquivos para uma pasta diferente chamada folder2. caminho para esta pasta é home / install / project1 / folder2. Ao copiar esses arquivos eu quero renomear cada arquivo e adicionar a data atual para o arquivo. então meus nomes de arquivos na pasta2 devem ser ..

aaa091012.dat
bbb091012.dat
ccc091012.dat
ddd091012.dat

Eu quero escrever um script de shell Linux para isso. Por favor, me dê uma ideia ou alguns exemplos de scripts relacionados a isso.

    
por G M Ramesh 04.03.2013 / 06:44

3 respostas

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
    
por 04.03.2013 / 07:13
1

Você pode fazer isso em duas etapas, primeiro cp :

cp -rp source/ target/

Em seguida, use rename . Mas você deve usar o sabor do Ubuntu, que é realmente um script Perl. Para Redhat, você pode instalar ou fazer o download do link . Infelizmente, a renomeação nativa de Redhat / Fedora não suporta expressões regulares Perl e não funcionará para isso.

De qualquer forma, use Perl-ish rename da seguinte forma:

cd target
rename 's/\.dat$/091012.dat/' *

Você pode até usá-lo recursivamente combinando-o com find e xargs , algo como:

find | xargs rename 's/\.dat$/091012.dat/'
    
por 04.03.2013 / 07:17
0

isso funcionou para mim:

    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
    
por 04.03.2013 / 07:32