Linux

帶空格的安全複製 (scp) 文件名問題

  • October 15, 2021

我正在嘗試使用安全副本(scp)複製文件。我正在嘗試執行以下命令,但由於目錄位置的絕對路徑中的空格而出現錯誤。

scp -r -P 8484 root@172.31.72.103:/media/New Volume/lj /home/pratheep

我收到以下錯誤:

scp: /media/New: No such file or directory  
scp: Volume/lj: No such file or directory

我嘗試使用相同的命令添加額外的反斜杠,例如

scp -r -P 8484 root@172.31.72.103:/media/New\ Volume/lj /home/pratheep

但我仍然遇到同樣的錯誤。

有人可以告訴我如何糾正嗎?

您應該將文件名引用兩次,一次用於本地 shell,一次用於遠端 shell。在最簡單的情況下,您可以執行以下操作之一

scp -r -P 8484 root@172.31.72.103:"'/media/New Volume/lj'" /home/pratheep
scp -r -P 8484 root@172.31.72.103:'"/media/New Volume/lj"' /home/pratheep

或使用製表符完成的幫助

scp -r -P 8484 root@172.31.72.103:/media/New\\\ Volume/lj /home/pratheep

scp並將rsync遠端文件名傳遞給遠端外殼。這允許您傳遞模式,如

scp remotehost:'*.txt' .

但它有一個令人討厭的後果,即在提供遠端文件名時需要額外引用。

您可以傳遞-s選項以rsync使其保護文件名不被遠端外殼擴展。但這會打開 rsync 的內置萬用字元擴展,所以你仍然需要引用\[?*.

一種解決方法是傳輸存檔:

ssh -P 8484 root@172.31.72.103 'cd "/media/New Volume" && tar cf - lj' |
tar xf - -C /home/pratheep

另一種方法是掛載遠端文件系統,然後使用普通工具進行複制。

mkdir mnt
sshfs -p 8484 root@172.31.72.103:/ mnt
cp -Rp 'mnt/media/New Volume/lj' /home/pratheep
fusermount -u mnt
rmdir mnt

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