Ssh
當目錄名稱有空格時如何通過 ssh 進行 rsync
我正在嘗試從一台伺服器同步到另一台伺服器。伺服器具有相同的目錄結構,但是當遠端伺服器中有空格時,我無法讓遠端伺服器正確辨識遠端伺服器上的路徑名。
這是詳細資訊
本地目錄是
mnt/xlses/split/v2/name with space
遠端目錄是
mnt/xlses/split/v2/name with space
我已經嘗試了所有我能找到的最新嘗試是
rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space/ root@myserver.com:/mnt/xlses/split/v2/"name with space"
當它執行時,它報告的第一件事是它正在創建一個新目錄
我打斷它,看到有一個新目錄
mnt/xlses/split/v2/name
我所有的文件都在那個目錄中
我期待他們在
mnt/xlses/split/v2/name with space
嘗試
rsync --protect-args --size-only -avzPe ssh "/mnt/xlses/split/v2/name with space/" "root@myserver.com:/mnt/xlses/split/v2/name with space"
來自
man rsync
:-s, –protect-args
> > 此選項將所有文件名和大多數選項發送到遠端 rsync,而不允許遠端 shell 解釋它們。這意味著名稱中不會拆分空格,並且不會翻譯任何非萬用字元的特殊字元(例如~、$、;、& 等)。萬用字元在遠端主機上通過 rsync 進行擴展(而不是由 shell 來做)。 > > > $$ … $$ >
這適用於 bash:用反斜杠轉義空格,然後使用引號:
rsync -avuz me@some.server.com:"/media/Music/Heavy\ Metal/Witch\ Mountain/*" .
或者,如果您在變數 $remote_path 中有路徑,則可以通過替換來轉義空格:
rsync -avuz me@some.server.com:"${remote_path// /\\ }" .