我通常会调用此命令:
scp -rp src/ user@server:dest/
这不会复制隐藏文件。我不想再次调用它(通过执行类似
scp -rp src/.* ...
的操作-无论如何都具有奇怪的.
和..
含义。我在
scp
手册页中没有看到有关“包括隐藏文件”。我该如何完成?
#1 楼
那应该绝对匹配隐藏文件。源代码末尾的/表示“此目录下的每个文件”。但是,测试和研究可以帮助您。这是愚蠢的行为。“答案”是在源的末尾添加一个点:
scp -rp src/. user@server:dest/
真正的答案是使用rsync。
评论
好招,我还没有意识到这一点。
–颅骨
09年6月7日在19:06
rsync -avz -e ssh --progress src / user @ server:dest /
– MikeyB
09年7月7日在23:23
我无法重现该行为。 scp -r source / host:source2复制点文件。从2007开始可在OpenSSH 5.1中使用。
– Mikel
11年8月8日在20:33
请注意,添加。最终由于安全问题而不再有效(2019)。此处说明:superuser.com/questions/1403473/scp-error-unexpected-filename
–Stéphane
19年2月12日在21:44
#2 楼
您可以尝试rsync。它更适合此工作:rsync -av src / user @ server:dest /
(其手册页值得阅读。)
评论
我总是对rsync使用--progress选项,没有它我就无法生存= D
–霍法
09年7月7日在21:21
@Hofa我通常使用-P因为它更短,它已经包括--progress并且还包括--partial,如果我已经对它的进度感兴趣的话,它就很有意义;-)
–颅骨
2012年3月31日上午10:27
如果您需要其他端口,请使用此端口:rsync -av -e“ ssh -p 2222” src / user @ server:dest /
–脑90
20-2-5在12:57
#3 楼
不要在源目录后加斜杠。您的代码将如下所示:scp -rp src user@server:dest/
这将在远程计算机上的“ dest”下创建目录“ src”,其中包括所有隐藏文件。这可能不是您想要的,但是它将在src中复制隐藏的文件。
#4 楼
以下将解决问题,这已在我们的持续集成环境中进行了全面测试scp -rp src/. user@server:dest/
example scp -rp /usr/src/code/. content001@172.11.11.11:/usr/dest/code/
希望对您有所帮助
评论
在最近更新scp之后,现在会导致scp:错误:意外的文件名:。 。一定要测试一下它是否适合您的发行版,其他Googler :)
–莫里茨·弗里德里希(Moritz Friedrich)
19年2月11日在11:39
#5 楼
要仅复制隐藏文件,请使用以下命令scp -rp /path_to_copy_hidden/.[!.]* user@host:/path_to_paste/
实际的游戏是
/.[!.]*
标记,它引用以.
开头的文件(隐藏)#6 楼
上面的scp解决方案都不适合我。但是,我的确发现以下内容适用于cygwin:
scp -r directory / * host:directory
'*'匹配所有可见文件并跳过不可见的内容。
#7 楼
如果在远程计算机上禁用了密码登录,并且唯一的登录方式是通过公用密钥登录,则可以使用此方法:$ rsync -av -s 'ssh -i /path/to/your/private/SSH/key' --progress user1@remote.host:/remote/source/directory/ /local/destination/directory/
它也复制隐藏文件。
还请注意,“ user1”必须具有读取这些文件的权限,例如,您不能使用此方法复制其他用户的ssh文件夹。
#8 楼
由于scp
支持正则表达式,因此可以很好地为您解决问题:scp -rp src/(*|.*) user@server:dest/
#9 楼
分布式修订版本控制处理隐藏文件由于CVE-2018-20685漏洞,
/.
技巧不能再与scp
一起使用。但是,分布式修订版本控制(例如
git
或Hg Mecurial)将处理隐藏文件,例如任何其他文件。以下是我最喜欢的汞汞的命令:server:$ sudo apt install mercurial
client:$ sudo apt install mercurial
client:$ hg init src
client:$ cd src/
client:$ hg addr
client:$ hg com -m "first commit"
client:$ cd
client:$ hg clone src ssh://user@server/dest/
随后的更改将需要使用
client:$ hg com -m "commit message"
再次提交,然后使用client:$ hg push
命令进行推送。从此汞汞汞备忘单中了解有关推动变革的更多信息。
评论
我假设src /.*也会复制src / ..(父目录),对吗?