Ответ 1
В bash
, если имена файлов не имеют пробелов:
cd /home/webapps/project1/folder1
for f in *.csv
do
cp -v "$f" /home/webapps/project1/folder2/"${f%.csv}"$(date +%m%d%y).csv
done
У меня есть папка на моем сервере, которая содержит некоторые файлы. Они автоматизированы, что означает, что каждый день мы автоматически получаем новые файлы, которые будут перезаписывать старые. Поэтому хочу получить резервную копию для этих данных. Как я могу скопировать все эти файлы в другую папку, переименовав файлы с текущей датой во время копирования.
ex: у меня есть папка с именем folder1, которая содержит 4 файла. путь для этой папки - home/webapps/project1/folder1
Теперь я хочу скопировать все эти четыре файла в другую папку с именем folder2. путь для этой папки - home/webapps/project1/folder2. при копировании этих файлов я хочу переименовать каждый файл и добавить текущую дату в файл. поэтому имена файлов в папке2 должны быть...
Я хочу написать оболочку script для этого. Пожалуйста, дайте мне некоторое представление или некоторые примеры сценариев, связанных с этим.
В bash
, если имена файлов не имеют пробелов:
cd /home/webapps/project1/folder1
for f in *.csv
do
cp -v "$f" /home/webapps/project1/folder2/"${f%.csv}"$(date +%m%d%y).csv
done
path_src=./folder1
path_dst=./folder2
date=$(date +"%m%d%y")
for file_src in $path_src/*; do
file_dst="$path_dst/$(basename $file_src | \
sed "s/^\(.*\)\.\(.*\)/\1$date.\2/")"
echo mv "$file_src" "$file_dst"
done
Вы можете использовать script, как показано ниже. Вам просто нужно изменить параметры даты в соответствии с желаемым форматом.
#!/bin/bash
for i in `ls -l /directroy`
do
cp $i /newDirectory/$i.`date +%m%d%Y`
done
Существует правильный способ разделить имя файла и расширение: Извлечь имя файла и расширение в Bash
Вы можете применить его так:
date=$(date +"%m%d%y")
for FILE in folder1/*.csv
do
bname=$(basename "$FILE")
extension="${bname##*.}"
filenamewoext="${bname%.*}"
newfilename="${filenamewoext}${date}.${extension}
cp folder1/${FILE} folder2/${newfilename}
done
cp --archive home/webapps/project1/folder1/{aaa,bbb,ccc,ddd}.csv home/webapps/project1/folder2
rename 's/\.csv$/'$(date +%m%d%Y).csv'/' home/webapps/project1/folder2/{aaa,bbb,ccc,ddd}.csv
Пояснение:
--archive
гарантирует, что файлы будут скопированы с тем же правом собственности и разрешениями.foo{bar,baz}
раскрывается в foobar foobaz
.rename
- это общедоступная программа, которая выполняет именно такую замену.