Shell script для копирования файлов из одного местоположения в другое место и переименования добавьте текущую дату в каждый файл

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

ex: у меня есть папка с именем folder1, которая содержит 4 файла. путь для этой папки - home/webapps/project1/folder1

  • aaa.csv
  • bbb.csv
  • ccc.csv
  • ddd.csv

Теперь я хочу скопировать все эти четыре файла в другую папку с именем folder2. путь для этой папки - home/webapps/project1/folder2. при копировании этих файлов я хочу переименовать каждый файл и добавить текущую дату в файл. поэтому имена файлов в папке2 должны быть...

  • aaa091012.csv
  • bbb091012.csv
  • ccc091012.csv
  • ddd091012.csv

Я хочу написать оболочку script для этого. Пожалуйста, дайте мне некоторое представление или некоторые примеры сценариев, связанных с этим.

Ответы

Ответ 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

Ответ 2

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

Ответ 3

Вы можете использовать script, как показано ниже. Вам просто нужно изменить параметры даты в соответствии с желаемым форматом.

#!/bin/bash

for i in `ls -l /directroy`
do
cp $i /newDirectory/$i.`date +%m%d%Y`
done

Ответ 4

Существует правильный способ разделить имя файла и расширение: Извлечь имя файла и расширение в 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

Ответ 5

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 - это общедоступная программа, которая выполняет именно такую ​​замену.

PS: не использовать ls для этого.