Ich habe eine Platte unter gemountet /data
. Diese ist momentan leer.
Ich muss das rsync
ausführen , da die Datei auf Ebene 4 sein muss , d. h. wenn sie nicht existiert.mkdir -p
mkdir
/data/dir_1/dir_2/dir_3/filename
dir_1
dir_2
dir_3
Wenn ich die benötigten Unterverzeichnisse manuell erstelle, kann ich rsync mit dem folgenden Befehl ausführen:
rsync -avz source_diretory/ /data/dir_1/dir_2/dir_3
Wenn ich die Unterverzeichnisse aber nicht erstelle, gibt dieser Befehl einen Fehler aus:
mkdir: cannot create directory ‘/data/dir_1/dir_2/dir_3/’: No such file or directory
Ich habe gegoogelt, die Manpage von rsync gelesen und versucht, es zu verwenden, -r
-R
aber es hat nicht funktioniert.
Kann man rsync
so etwas durchführen mkdir -p
oder liegt das außerhalb seines Aufgabenbereichs?
Antwort1
rsync
Der Befehl erstellt keinen Verzeichnisbaum, Sie können dies also durch Ausführen von:
mkdir -p /data/dir_1/dir_2/dir_3
vor rsync
dem Befehl oder der Verwendung--rsync-PfadOptionen:
--rsync-path=PROGRAMM Verwenden Sie dies, um anzugeben, welches Programm auf dem Remotecomputer ausgeführt werden soll, um rsync zu starten.
Ihr Befehl sollte sein:
rsync -avz source_diretory/ --rsync-path="mkdir -p /data/dir_1/dir_2/dir_3 && rsync" /data/dir_1/dir_2/dir_3
Hier ist eine nützlicheVerknüpfung.
Antwort2
Eine kürzere Möglichkeit zum Erstellen von Rsync-Zielpfaden unter Linux besteht in der Verwendung der Sondervariable „$_“. (Ich glaube, kann aber nicht bestätigen, dass dies unter OSX genauso ist.)
'$_' enthält den Wert des letzten Arguments des zuvor ausgeführten Befehls. Die Frage könnte also wie folgt beantwortet werden:
mkdir -p /data/dir_1/dir_2/dir_3 && rsync -avz source_directory/ $_