Linux-Shell-Skript zum Kopieren von Dateien von einem Speicherort an einen anderen


0

Ich habe einen Ordner auf meinem Server, der einige Dateien enthält. Diese sind automatisiert, was bedeutet, dass wir jeden Tag automatisch neue Dateien erhalten, die die alten überschreiben. Also wollen Sie ein Backup für diese Daten machen. Wie kann ich all diese Dateien in einen anderen Ordner kopieren, indem ich die Dateien beim Kopieren mit dem aktuellen Datum umbenenne?

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

aaa.dat
bbb.dat
ccc.dat
ddd.dat

Jetzt möchte ich alle diese vier Dateien in einen anderen Ordner mit dem Namen folder2 kopieren. Der Pfad für diesen Ordner lautet home / install / project1 / folder2. beim kopieren dieser dateien möchte ich jede datei umbenennen und das aktuelle datum zur datei hinzufügen. so sollten meine dateinamen in folder2 sein ..

aaa091012.dat
bbb091012.dat
ccc091012.dat
ddd091012.dat

Ich möchte eine schreiben Linux Shell-Skript für diese. Bitte geben Sie mir eine Idee oder einige Beispielskripte dazu.


@ JimGarrison, ich habe diesen Befehl ausprobiert ... $ mv / directory_one / * / directory
G M Ramesh

@ JimGarrison, für Unix-Shell, ich weiß das Skript, wie man Dateien kopiert, aber für Linux weiß ich nicht ... Wenn die Unix-Befehle auch für Linux funktionieren, ist es in Ordnung. Ich kann es ausmachen ...
G M Ramesh

2
98% der Unix-Befehle haben unter Linux identische oder sehr ähnliche Gegenstücke.
Ex Umbris

@ GMRamesh: Welche Linux-Variante verwendest du? Ubuntu?
mvp

Ich benutze Red Hat
G M Ramesh

Antworten:


2
srcdir="home/install/project1/folder1"
dstdir="home/install/project1/folder2"
d=$(date +%m%d%y)

for srcfile in ${srcdir}/*
do
    dstfile=$(basename $srcfile)
    dstfile=${dstfile/\./${d}\.}
    cp $srcfile $dstdir/$dstfile
done

1
Es gibt einige Probleme mit diesem Skript. vor allem, $srcfile wird eigentlich nur gleich sein $srcdir.
ruakh

Guter Fang @ruakh, jetzt bearbeiten
maverick

Fügen Sie einfach eine Anmerkung hinzu, dass dieses Skript keine Dateien kopieren würde, die in Unterverzeichnissen von vorhanden sind srcdir um sicherzustellen, dass es das ist, was OP erwartet.
Tuxdude

Jetzt $dstfile wird z.B. home/install/project1/folder1/aaa091012.dat, so $dstdir/$dstfile wird z.B. home/install/project2/folder2/home/install/project1/folder1/aaa091012.dat.
ruakh

Nett, @ruakh - nochmal bearbeitet
maverick

1

Sie können dies zunächst in 2 Schritten tun cp:

cp -rp source/ target/

Dann benutze rename. Aber du solltest Ubuntu verwenden, was eigentlich Perl-Skript ist. Unter Umständen können Sie Redhat von installieren oder herunterladen https://metacpan.org/module/rename . Leider unterstützt die native Redhat / Fedora-Umbenennung keine regulären Perl-Ausdrücke und funktioniert daher nicht.

Verwenden Sie auf jeden Fall Perl-ish rename so was:

cd target
rename 's/\.dat$/091012.dat/' *

Sie können es sogar rekursiv verwenden, indem Sie es mit kombinieren find und xargs, so etwas wie:

find | xargs rename 's/\.dat$/091012.dat/'

0

das hat bei mir geklappt:

    cd home/install/project1/folder1
    for f in *.dat
    do 
    cp -v $f /home/install/project1/folder2/${f%.dat}$(date +%m%d%y).dat
    done
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.