rsync gibt mkdir aus: Verzeichnis „/data/dir_1/dir_2/dir_3/“ kann nicht erstellt werden: Keine solche Datei oder kein solches Verzeichnis

rsync gibt mkdir aus: Verzeichnis „/data/dir_1/dir_2/dir_3/“ kann nicht erstellt werden: Keine solche Datei oder kein solches Verzeichnis

Ich habe eine Platte unter gemountet /data. Diese ist momentan leer.

Ich muss das rsyncausführen , da die Datei auf Ebene 4 sein muss , d. h. wenn sie nicht existiert.mkdir -pmkdir/data/dir_1/dir_2/dir_3/filenamedir_1dir_2dir_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 -Raber es hat nicht funktioniert.

Kann man rsyncso etwas durchführen mkdir -poder liegt das außerhalb seines Aufgabenbereichs?

Antwort1

rsyncDer Befehl erstellt keinen Verzeichnisbaum, Sie können dies also durch Ausführen von:

 mkdir -p /data/dir_1/dir_2/dir_3

vor rsyncdem 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/ $_

verwandte Informationen