Linux
帶空格的安全複製 (scp) 文件名問題
我正在嘗試使用安全副本(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