Saya mencoba rsync dari satu server ke yang lain. Server memiliki struktur direktori yang sama tetapi saya mengalami kesulitan mendapatkan server remote untuk mengenali nama path di remote ketika ada ruang di dalamnya.
Berikut detailnya
Direktori lokal adalah
mnt/xlses/split/v2/name with space
Direktori jarak jauh adalah
mnt/xlses/split/v2/name with space
Saya sudah mencoba semua yang saya dapat temukan upaya terbaru itu
rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space/ [email protected]:/mnt/xlses/split/v2/"name with space"
ketika menjalankan hal pertama yang dilaporkan adalah membuat direktori baru
Saya menyela dan melihat ada direktori baru
mnt/xlses/split/v2/name
semua file saya ada di direktori itu
Saya mengharapkan mereka masuk
mnt/xlses/split/v2/name with space
Mencoba
Dari
man rsync
:sumber
man rsync
dan mencari (/s
) untuk "--protect". Untuk menginstal dengan homebrew:brew install homebrew/dupes/rsync
Jika tidak ditemukan jalankanbrew search rsync
.rsync -Pavuz 'you@host:~/file\ with\ spaces' ./
Ini bekerja di bash: Melarikan diri dari spasi dengan backslash dan kemudian menggunakan tanda kutip:
Atau jika Anda memiliki path di variabel $ remote_path, spasi dapat diloloskan dengan substitusi:
sumber
-s
opsi ini dapat digunakan pada rsync versi modern apa pun dan dirancang untuk mengatasi masalah iniGunakan dua pasang kutipan
Jangan repot-repot dengan semua garis miring terbalik, cukup gunakan tanda kutip tunggal di dalam tanda kutip ganda :
Anda juga dapat menggunakan kebalikannya, yaitu, tanda kutip ganda dalam tanda kutip tunggal :
Info lebih lanjut
Wildcard di sisi server
Jika Anda ingin
*
ditafsirkan di server daripada klien,*
harus masuk hanya dengan satu dari 2 pasang kutipan. Saya menemukan ini kontra-intuitif karena secara logis pasangan terluar lolos dari interpretasi klien, sementara pasangan dalam kutipan keluar dari interpretasi server.Lindungi Args
Keuntungannya, dibandingkan dengan
--protect-args
solusinya , adalah bahwa Anda sebenarnya tidak memiliki batasan--protect-args
, sehingga Anda dapat menggunakan karakter khusus seperti~
atau$
. Jadi, Anda dapat menulis:atau
Perhatikan bahwa tilde (
~
) dalam contoh terakhir harus di luar tanda kutip ganda.Anda dapat menempatkan salah satu pasangan kutipan di sekitar nama pengguna @ host: bagian file (mis.
ssh "[email protected]:'/home/me/test file'" .
)sumber
Saya mengerti ini adalah pertanyaan lama, tetapi saya pikir saya akan menambah pengetahuan yang ada.
Saya telah menggunakan
rsync
banyak folder dengan ruang dan ini berfungsi. Folder saya bernomor 1-10 sebagai berikut:The\ Folder1
The\ Folder2
The\ Folder3
The\ Folder10
2 instance yang ingin Anda gunakan
rsync
adalah lokal dan jarak jauh.Lokal - Catat kurangnya kutipan.
Remote - Catat keberadaan kutipan
sumber
Secara umum, kutip argumen dan lepaskan karakter spasi dalam argumen. Dalam contoh yang Anda berikan, coba:
sumber
Dari halaman
rsync
manual:sumber
Yah saya akan menjawab pertanyaan ini sendiri meskipun orang lain mungkin melakukan pekerjaan yang lebih baik untuk menjelaskannya.
Jelas pengaturan pada mesin tujuan mempengaruhi bagaimana argumen diuraikan dan kita harus memiliki sesuatu pengaturan yang membuatnya sulit untuk menggunakan tanda kutip atau garis miring untuk keluar dari ruang tetapi kita dapat menggunakan kartu liar jadi saya melakukan ini
Ini berfungsi untuk saya karena hanya ada satu direktori yang dimulai dengan nama jika saya memiliki beberapa direktori ini tidak akan berfungsi.
Pada akhirnya saya perlu memahami cara men-setup server jauh sehingga dapat mengurai nama path lebih efisien - Saya tidak pernah menggunakan spasi dalam nama direktori tetapi orang yang mengatur ini melakukannya dan setidaknya untuk saat ini saya terjebak
sumber
Bergantung pada situasinya, opsi cepat adalah membuat symlink pada sistem jarak jauh:
Kemudian gunakan
-L
benderarsync
yang memerintahkannya untuk mengikuti konten direktori:sumber
double escape juga berfungsi
sumber
Coba dengan cara ini:
sumber