問題描述
我是Linux新手,我想將文件從遠程復制到本地系統…現在,我在Linux系統中使用scp命令。當我嘗試將其復制時,我有一些文件夾或文件名帶有空格文件,它顯示錯誤消息:“沒有這樣的文件或目錄”
我試過了:
scp ael5105@192.168.0.200:'/home/5105/test/gg/Untitled Folder/a/qy.jpg' /var/www/try/
我在網上看到了一些參考資料,但我不太了解,有人可以幫忙嗎?
復制期間如何在文件名或目錄名中轉義空格…
最佳思路
基本上,您需要對它進行兩次轉義,因為它是在本地然后在遠端進行轉義。
您可以選擇幾種方式(bash中):
scp user@example.com:"'web/tmp/Master File 18 10 13.xls'" .
scp user@example.com:"web/tmp/Master\ File\ 18\ 10\ 13.xls" .
scp user@example.com:web/tmp/Master\\\ File\\\ 18\\\ 10\\\ 13.xls .
次佳思路
作品
scp localhost:"f/a\ b\ c" .
scp localhost:'f/a\ b\ c' .
不起作用
scp localhost:'f/a b c' .
原因是在路徑傳遞給scp命令之前,shell會解釋字符串。因此,當到達遠程服務器時,遠程服務器正在尋找帶有未轉義引號的字符串,但失敗
要查看實際情況,請使用-vx選項啟動 shell 程序,即bash -vx,它將在運行命令時顯示命令的內插版本。
第三種思路
您也可以執行以下操作:
scp foo@bar:"\"apath/with spaces in it/\""
第一級報價將由scp解釋,然后第二級報價將保留空格。
第四種思路
使用3個反斜杠轉義目錄名稱中的空格:
scp user@host:/path/to/directory\\\ with\\\ spaces/file ~/Downloads
應該從名為directory with spaces的遠程目錄中將file復制到您的Downloads目錄。
第五種思路
我很難將其用于包含空格的文件名的shell變量。由于某些原因使用
file="foo bar/baz"
scp user@example.com:"'$file'"
就像@Adrian的回答似乎失敗了。
事實證明,最有效的方法是使用參數擴展將反斜杠添加到空格之前,如下所示。
file="foo bar/baz"
file="${file//\ /\\\ }"
scp user@example.com:"$file"
參考資料