rsync benutzt die Option --files-from nicht?

13

Ich versuche zu laufen rsync -a --files-from=~/.rsync_file_list ~/destinationund es sagt mir: rsync error: syntax or usage error (code 1) at options.c(1652) [client=3.0.7]. Kann mir jemand erklären, was ich falsch mache?

Die Datei ~/.rsync_file_listenthält nur eine Liste von Dateinamen mit vorangestelltem ~/Zeichen, die durch Zeilenumbrüche getrennt sind (obwohl ich auch versucht habe, sie alle in derselben Zeile mit demselben Ergebnis aufzulisten).

Wenn ich renne rsync -a ~/file ~/file2 ~/file3 ~/destination, funktioniert es einwandfrei. Was vermisse ich also an der --files-fromOption?

Wolf
quelle
versuchensed "s#~/#/home/wolf/#g" -ie ~/.rsync_file_list
Andy
@ Andy: Ach, das gleiche Ergebnis.
Wolf

Antworten:

20

Okay, ich habe das Problem gefunden.

  1. Die Datei mit Dateinamen darf nur enthalten Dateinamen . keine Pfade, weder relativ noch anderweitig;
  2. Nach der Angabe --files-from=FILEbenötigt rsync ein Quellverzeichnis, in dem sich die aufgelisteten Dateien befinden.

So sollte der Befehl sein rsync -a --files-from=~/.rsync_file_list $HOME/ /destination .

.rsync_file_list sollte lesen:

file 1
file 2
file 3
Wolf
quelle
3
Korrektur: Dateinamen in der angegebenen Datei sind relativ zum Quellverzeichnis, dürfen aber nicht darüber liegen (nein ../). Führende Schrägstriche werden ignoriert, sodass absolute Pfade nicht funktionieren.
Wolf
Ich glaube, Sie können Ihre eigene Antwort bearbeiten und diese sehr nette Ergänzung und relevante Information hinzufügen, die Sie später in der Antwort selbst herausgefunden haben.
Vinícius M
0

Die Verwendung des "~" funktioniert möglicherweise nicht in einer "files-from" -Datei, es sei denn, rsync ist intelligent genug, um das "~" -Symbol zu erkennen und zu übersetzen.

Wenn Sie ein "~" als Teil eines Befehls in der Befehlszeile Ihrer Shell angeben , konvertiert die Shell selbst "~" in Ihr Ausgangsverzeichnis, bevor Sie das Argument an das Programm weitergeben. Also, obwohl Sie tippen rsync -a ~/file, ist das, was rsync"sieht", tatsächlich der aufgelöste Pfad, oder rsync -a /home/foo/file.

Weitere Informationen finden Sie unter Bash-Tilde-Erweiterung .

zwölf17
quelle