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

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

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

  1. aaa.csv
  2. bbb.csv
  3. ccc.csv
  4. ddd.csv

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

  1. aaa091012.csv
  2. bbb091012.csv
  3. ccc091012.csv
  4. ddd091012.csv

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

В 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 

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

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

 #!/bin/bash for i in `ls -l /directroy` do cp $i /newDirectory/$i.`date +%m%d%Y` 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 – это общедоступная программа, предназначенная для такого рода замещения.

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

Вы можете использовать этот шаг очень полезно:

 for i in `ls -l folder1 | grep -v total | awk '{print $ ( ? )}'` do cd folder1 cp $i folder2/$i.`date +%m%d%Y` done