У меня есть папка на моем сервере, которая содержит несколько файлов. Они автоматизированы, что означает, что каждый день мы автоматически получаем новые файлы, которые перезаписывают старые. Поэтому хочу сделать резервную копию этих данных. Как я могу скопировать все эти файлы в другую папку, переименовав файлы с текущей датой при копировании.

Пример: у меня есть папка с именем 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 для этого. Пожалуйста, дайте мне идею или несколько примеров сценариев, связанных с этим.

3 ответа3

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
1

Вы можете сделать это в 2 шага, сначала cp:

cp -rp source/ target/

Затем используйте rename . Но вы должны использовать его Ubuntu, который на самом деле является скриптом Perl. Для Redhat вы можете установить или загрузить его с https://metacpan.org/module/rename . К сожалению, собственное переименование Redhat/Fedora не поддерживает регулярные выражения Perl и не будет работать для этого.

В любом случае используйте rename Perl следующим образом:

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

Вы даже можете использовать его рекурсивно, комбинируя его с find и xargs , что-то вроде:

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

это сработало для меня:

    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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .