我有一个 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