Rsync melalui jalur SSH dengan spasi tidak bekerja dengan tanda kutip

17

Saya dapat berhasil RSYNC melalui SSH selama jalur tidak memiliki ruang di dalamnya.

Ketika path memang memiliki spasi, itu tidak berfungsi. Saya telah mencoba tebasan, kutipan, dan kutipan ganda.

Ketika saya menggunakan garis miring, output menyatakan bahwa itu sukses tetapi saya tidak melihat file yang ditransfer.

rsync -avz /path\ with\ spaces/ user@remotelocation:/media/another\ path\ with/spaces/

Ketika saya menggunakan tanda kutip tunggal atau ganda, itu memberi tahu saya bahwa izin ditolak setelah memasukkan kata sandi saya

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

Apa yang dapat saya?

Terima kasih.

AndrewMRiv
sumber

Jawaban:

12

Memperluas jawaban rzr dengan contoh kode dan referensi, cukup tambahkan -sflag, kutip path, dan jangan khawatir tentang keluar spasi di path jauh:

rsync -avzs '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

Untuk referensi, opsi yang ditentukan oleh OP:

  • -a, mode arsip, sama dengan -rlptgoD (no -H, -A, -X)
    • Termasuk:
    • -r, --recursive, berulang ke direktori
    • -l, --links, salin symlinks sebagai symlinks
    • -p, --perms, pertahankan izin
    • -t, --times, pertahankan waktu modifikasi
    • -g, --group, pertahankan grup
    • -o, --owner, pertahankan pemilik (hanya pengguna super)
    • -devices, menyimpan file perangkat (hanya pengguna super)
    • -specials, menyimpan file khusus
  • -v, --verbose, tingkatkan verbositas
  • -z, --compress, kompres data file selama transfer

Parameter tambahan yang dibutuhkan:

  • -s, --protect-args, tidak ada pemisahan karakter, karakter wildcard saja
binarysubstrate
sumber
13

Anda harus keluar dari ruang di shell lokal dan shell jarak jauh. Coba ini:

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another\ path\ with/spaces/'

Sumbernya, /path with spaces/di shell lokal hanya bisa diloloskan dengan meletakkan tanda kutip tunggal di sekitarnya '/path with spaces/'.

Di sisi lain dalam kasus tujuan, shell lokal lolos dengan menempatkan tanda kutip tunggal dan spasi melarikan diri di shell jauh dengan menggunakan karakter escape ( \) di depan spasi.

heemayl
sumber
3
Hanya untuk menekankan - Anda perlu KEDUA kutipan dan garis miring terbalik.
Sridhar Sarnobat
2

lihat opsi rsync –protect-args (-s), tidak diperlukan garis miring tambahan

rzr
sumber
1
Jawaban Anda akan jauh lebih baik jika Anda memberikan contoh yang bisa diikuti oleh pengguna pemula. Terima kasih!
Penatua Geek