it-roy-ru.com

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

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

пример: у меня есть папка с именем 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

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

18
ran

В 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
27
Stephane Rouberol

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

#!/bin/bash

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

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

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

for i in `ls -l folder1 | grep -v total | awk '{print $ ( ? )}'`
do
   cd folder1
   cp $i folder2/$i.`date +%m%d%Y`
done
0
kanakaraj. p
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 для этого .

0
l0b0