Ssh

當目錄名稱有空格時如何通過 ssh 進行 rsync

  • April 1, 2022

我正在嘗試從一台伺服器同步到另一台伺服器。伺服器具有相同的目錄結構,但是當遠端伺服器中有空格時,我無法讓遠端伺服器正確辨識遠端伺服器上的路徑名。

這是詳細資訊

本地目錄是

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// /\\ }" .

引用自:https://unix.stackexchange.com/questions/104618