為什麼 scp 說「沒有這樣的檔案」?

為什麼 scp 說「沒有這樣的檔案」?

我有一個 bash 腳本,用於scp將檔案從我的機器複製到另一台機器。輸入 SSH 密碼後,腳本繼續退出,並出現錯誤:

<filename>: No such file or directory

然而,在腳本中,我檢查了文件,一切都很好。我set -o verbose 在開始時做了以下是我在腳本結尾處得到的內容:

scp /Volumes/FX4\ HDD/Users/matthewdavies/Downloads/NCIS.S11E01.HDTV.x264-LOL.mp4 [email protected]:"/media/3TB/TV\ Shows/NCIS"
[email protected]'s password:
/Volumes/FX4\ HDD/Users/matthewdavies/Downloads/NCIS.S11E01.HDTV.x264-LOL.mp4: No such file or directory

因此,我嘗試執行scp輸出的命令,結果很好;它複製了。出了什麼問題?

答案1

我不完全確定你在做什麼,但是當我嘗試你的範例中的命令時,我得到以下資訊:

$ scp /home/saml/projects/Cooks.com\ -\ Recipe\ -\ Coconut\ Chicken.mht \
       root@remotey:"/root/some spaced out file.mht"
scp: ambiguous target

這是因為您引用了目標路徑,而且它還包含轉義空格的反斜線。然而,噹噹前 shell 去掉雙引號時,它也會去掉單反斜杠,使目標路徑成為帶有空格的裸字串。您需要執行以下操作之一以進一步嵌套它,以便正確轉義空格:

例子

方法#1 - 雙引號、單引號

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:"'/home/user/some spaced out file.txt'"

方法#2 - 單引號、雙引號

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:'"/home/user/some spaced out file.txt"'

方法#3 - 單引號、反斜線

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:'/home/user/some\ spaced\ out\ file.txt'

方法 #4 - 雙引號、反斜杠

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:"/home/user/some\ spaced\ out\ file.txt"

方法#5 - 三重反斜杠

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:/home/user/some\\\ spaced\\\ out\\\ file.txt

相關內容