• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

dateien mit ihrem unterverzichnis kopieren

lesihc

Newbie
servus
ich habe folende situation: ich habe ein Verzeichnis "verz1" mit mehreren Unterverzeichnissen "a", "b",... und ich möchte die Dateien in diesen Unterverzeichnissen mit EINEM Befehl in ein anderes Verzeichnis "verz2" verschieben. Dabei sollen aber die Verzeichnisse "a", "b",... übernommen werden.

Andererseits sollen die Unterverzeichnisse "a", "b" nicht gelöscht werden sondern eben nur der Inhalt dieser Unterverzeichnisse.

Bisher habe ich für jedes Vezeichnis einen seperaten cronjob. also:
find /verz1/a/ - exec mv -f {} /verz2/a/
find /verz1/b/ - exec mv -f {} /verz2/b/
...

das muss doch irgendwie einfacher gehen
 

TeXpert

Guru
jein, ohne irgendeine Form von Schleife kommst Du nicht aus.

Du bekommst mit
Code:
find /foo/*/ ...
alle Filesim Baum

Code:
foo/a/
foo/b/
foo/c/

so also, der Inhalt aller Verzeichnisse soll verschoben werden
Code:
entspricht also mv -f /foo/<X>/* /bar/<X>/
dabei ist <X> 1. variabel aber fest und 2. ein Verzeichnis

also
Code:
find /foo/*/ -type d
so jetzt kopieren ... exec kann nicht viel damit anfangen :( also muss unsere Shell den Rest machen. (Achtung: Trailing '/' ist notwendig für später!"

die Shell bekommt also eine Zeichenkette "/foo/<X>/" -> Ziel: verschiebe alles in das Verzeichnis "/bar/<X>/"

Bestimme <X> und verschiebe
Code:
mv -f "SRC/*" "DEST/<X>/"
und das für alle <X>:

Code:
$ find /src/*/ -type d | while read src ; do mv -f $src* /dest/$(basename $src)/ ; done

Probleme macht hier u.u. die Auflösung der Dateien ($src*) -> wenn das zu viel wird macht die Shell zu!

daher gäbs noch die Variante:

Code:
find blah/*/ -printf "PASSENDE FORMATIERUNG" | while read line ; do PARSE_LINE_AND_COPY_FILE ; done

dabei wird jede Datei übergeben mit entsprechenden Infos und Du musst das manuell auseinanderpflücken und das Zeilverzeichnis bestimmen.
 

ukd

Newbie
Man könnte die Arbeit in 2 Schritten erledigen:

rsync -av verz1/ verz2

Das kopiert den Inhalt von verz1 ins Verzeichnis verz2. Anschließend wären dann die Originaldateien zu löschen:

find verz1 -path "verz1/*/*" -exec rm {} \;
 
Oben