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
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.
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/'
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