Ich möchte geänderte Dateien in einem SVN-Repository in ein anderes Verzeichnis kopieren und dabei die Verzeichnisstruktur beibehalten.
Nachdem ich die Hilfeseiten awk und xargs gelesen habe, finde ich eine Möglichkeit, die Dateinamen wie folgt zu ändern:
$ svn status -q | awk '{ print $2 }' | xargs -d \\n -I '{}' cp '{}' /tmp/xen/
Das Problem ist aber, dass auf diese Weise Verzeichnisstrukturen nicht erhalten bleiben, ich möchte Dateien wie diese kopieren:
./common/superp.c -> /tmp/xen/common/superp.c
./common/m2mgr.c -> /tmp/xen/common/m2mgr.c
./common/page_alloc.c -> /tmp/xen/common/page_alloc.c
./arch/x86/mm.c -> /tmp/xen/arch/x86/mm.c
./arch/x86/mm/shadow/private.h -> /tmp/xen/arch/x86/mm/shadow/private.h
Ich habe versucht, den Befehl cp in cp '{}' / tmp / xen / '{}' zu ändern , aber es wurde keine solche Datei oder kein solches Verzeichnis angegeben. Gibt es eine Möglichkeit, eine cp-Datei zu kopieren und ein Verzeichnis zu erstellen, falls erforderlich? Und bitte weisen Sie darauf hin, ob diese Befehlskette vereinfacht werden kann. :-)
Vielen Dank für alle Ihre Antworten. Da das Verzeichnis etwas groß ist, möchte ich nicht das gesamte Verzeichnis mit cp -R oder rsync kopieren. Der Vorschlag von CK, eine Teerpfeife zu verwenden, ist sehr nützlich.
svn status -q | awk '{ print $2 }' | xargs tar cf - | (cd /tmp/xen/; tar xvf -)
quelle
Hier ist der Einzeiler als Referenz:
Und auf englisch:
svn status -q
, die weitergeleitet werden in ...awk '{print $2}'
xargs tar -c
-x
in das Zielverzeichnis extrahiert (-C path
):tar -xC /tmp/xen
quelle
Verwenden Sie "dirname", um den Pfad "mkdir -p" zu extrahieren und zu erstellen.
quelle
rsync -a erstellt keine neuen Verzeichnisse tiefer als in Tiefe 1, daher ist rsync nur eine Teillösung und zum Beispiel nicht für mich geeignet )
Bearbeiten: Ich meine, ich habe Quellverzeichnis: /home/user/projects/homework/1/1.1/ Und ich möchte es mit Remote synchronisieren: /home/user/projects/homework/1/1.1/ ... aber Ziel hat noch kein Verzeichnis / home / user / projects / homework ... und ich möchte keine anderen Unterverzeichnisse auf dem Quellcomputer übertragen, die sich in / home / user / projects / befinden.
Edit2: Einen Weg gefunden, mit rsync --relative Option: Das obige Beispiel würde so aussehen:
cd / home / projekte /; rsync -aR Hausaufgaben / 1 / 1.1 Benutzer @ Remote: / home / Benutzer / Projekte /
quelle
Ich würde folgendes vorschlagen:
Übrigens kopiert cp with R flag Dateien / Ordner rekursiv.
quelle
Verzeichnisstruktur
/tmp/f2
für Dateien in erstellen/tmp/f
Datei in neues Ziel kopieren
/tmp/f2/
quelle