rsync tidak menggunakan opsi --files-from?

13

Saya mencoba untuk menjalankan rsync -a --files-from=~/.rsync_file_list ~/destinationdan memberitahu saya: rsync error: syntax or usage error (code 1) at options.c(1652) [client=3.0.7]. Adakah yang bisa memberi tahu saya apa yang saya lakukan salah?

File tersebut ~/.rsync_file_listhanya berisi daftar nama file yang diawali dengan ~/, dipisahkan oleh baris baru (meskipun saya juga sudah mencoba mendaftarkan semuanya pada baris yang sama, dengan hasil yang sama).

Jika saya menjalankannya rsync -a ~/file ~/file2 ~/file3 ~/destinationberfungsi dengan baik. Jadi apa yang saya lewatkan tentang --files-fromopsi ini?

Serigala
sumber
cobased "s#~/#/home/wolf/#g" -ie ~/.rsync_file_list
Andy
@Andy: Aduh, hasil yang sama.
Wolf

Jawaban:

20

Oke, saya menemukan masalahnya.

  1. File yang berisi nama file harus hanya berisi nama file; tidak ada jalur, relatif atau sebaliknya;
  2. Setelah menentukan --files-from=FILE, rsync memerlukan direktori sumber untuk menemukan file yang terdaftar.

Jadi perintahnya seharusnya rsync -a --files-from=~/.rsync_file_list $HOME/ /destination.

.rsync_file_list harus dibaca:

file 1
file 2
file 3
Serigala
sumber
3
Koreksi: Nama file dalam file yang diberikan ADALAH relatif terhadap direktori sumber, tetapi tidak bisa di atasnya (tidak ../). Garis miring terkemuka akan diabaikan, jadi jalur absolut tidak berfungsi.
Wolf
Saya yakin Anda dapat mengedit jawaban Anda sendiri dan menambahkan tambahan yang sangat bagus dan info yang relevan yang Anda temukan kemudian dalam jawaban itu sendiri.
Vinícius M
0

Menggunakan "~" mungkin tidak berfungsi di dalam file "files-from" kecuali rsync cukup pintar untuk mengenali dan menerjemahkan simbol "~".

Ketika Anda menentukan "~" sebagai bagian dari perintah di baris perintah shell Anda, itu adalah shell itu sendiri yang mengubah "~" ke direktori home Anda sebelum meneruskan argumen ke program. Jadi meskipun Anda mengetik rsync -a ~/file, apa yang rsync"dilihat" sebenarnya adalah jalur yang diselesaikan, atau rsync -a /home/foo/file.

Lihat Bash Tilde Expansion untuk informasi lebih lanjut.

dua belas17
sumber