使用空格安全复制(scp)文件名时出现问题


9

我正在尝试使用安全副本(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

但我仍然遇到相同的错误。

有人可以告诉我如何纠正它吗?

Answers:


18

您应该两次引用文件名,一次用于本地外壳程序,一次用于远程外壳程序。在最简单的情况下,您可以执行以下任一操作

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

3
值得注意的是,scpssh其用作传输方式可以解释为什么发生了两次外壳解释。
msw 2012年

1

scp并将rsync远程文件名传递给远程外壳。这样可以传递模式,如

scp remotehost:'*.txt' .

但是这样做的后果是,提供远程文件名时需要额外的引用。

您可以传递该-s选项以rsync使其受远程Shell扩展保护文件名。但这开启了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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.