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
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 ..
Ich möchte dazu ein Shell-Skript schreiben. Bitte geben Sie mir eine Idee oder Beispielskripte.
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
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
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
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
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
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
.