web-dev-qa-db-de.com

Shell-Skript zum Kopieren von Dateien von einem Speicherort an einen anderen Speicherort und Umbenennen des aktuellen Datums zu jeder Datei

Ich habe auf meinem Server einen Ordner, der einige Dateien enthält. Diese sind automatisiert, das bedeutet, dass wir täglich neue Dateien automatisch erhalten, wodurch die alten überschrieben werden. Sie möchten also eine Sicherungskopie dieser Daten erstellen. Wie kann ich alle diese Dateien in einen anderen Ordner kopieren, indem Sie die Dateien beim Kopieren mit dem aktuellen Datum umbenennen.

beispiel: Ich habe einen Ordner namens folder1, der 4 Dateien enthält. Der Pfad für diesen Ordner lautet home/webapps/project1/folder1

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

jetzt möchte ich alle diese vier Dateien in einen anderen Ordner namens folder2 . kopieren. Der Pfad für diesen Ordner lautet home/webapps/project1/folder2 . Datum in die Datei . so sollten meine Dateinamen in Ordner2 sein ..

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

Ich möchte dazu ein Shell-Skript schreiben. Bitte geben Sie mir eine Idee oder Beispielskripte.

18
ran

In bash, sofern die Dateinamen keine Leerzeichen enthalten:

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

Sie können ein Skript wie das folgende verwenden. Sie müssen lediglich die Datumsoptionen ändern, um sie dem gewünschten Format anzupassen.

#!/bin/bash

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

Es gibt eine geeignete Methode, den Dateinamen und die Erweiterung zu teilen: Dateiname und Erweiterung in Bash extrahieren

Sie können es so anwenden:

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
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

Dieser Schritt ist sehr nützlich:

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

Erläuterung:

  • --archive stellt sicher, dass die Dateien mit demselben Besitz und denselben Berechtigungen kopiert werden.
  • foo{bar,baz} wird zu foobar foobaz erweitert.
  • rename ist ein allgemein verfügbares Programm, um genau diese Art von Substitution durchzuführen.

PS: verwende keine ls .

0
l0b0