我第一次将用户文件从旧系统移动到新系统。我的目标是使用 SCP 的简单语法scp -r source destination
。我尝试使用以下命令首先复制文件:
scp -r [email protected]:/home/someuser/* .
回想起来,根据过去的经验,这复制了所有没有前导.
. 在我试图解决这个问题时,我这样做了:
scp -r [email protected]:/home/someuser/.* .
表示以 a 开头的任何内容的通配符.
。显然(为什么我要问这个问题)它没有做我想要的。观察到的结果是,它将 解释.
为在路径中向上移动了一个级别,而是开始复制/home/*
,而且(我认为)将文件从我的工作目录而不是工作目录本身放在了上一级。
我对执行第二个命令的解释是否正确?我认为自从我进入以来它很容易修复~/backup
,所以升级了一个级别~
。我只是rm -rf ~/someuser
在中断命令之前复制的每个用户名。这些someuser
目录应该在~/backup
从那以后,我学会了如何通过仅指定目录而不是目录中包含的文件来复制我想要的文件。
这不是
.
提高一个级别,而是在 shell 的模式匹配语法中,*
表示任意数量的任意字符,因此它匹配..
每个目录中存在的条目并指向下一个上级目录。你可以ls .*
在 Bash 和许多其他 shell 中得到相同的结果。匹配
.*
特殊条目是一种永远不会有用的痛苦.
。..
您可能会看到人们使用丑陋的变通方法,例如.??* .[!.]
在..
条目中显式导航。(*)幸运的是,一些更智能的 shell 从 glob 结果中删除了这两个,zsh 可能是最突出的,但不是唯一的。(至少 Bash 的开发版本也有这个
globskipdots
选项。)在这种特殊情况下,增加了复杂性,即扩展 glob 的是 SSH 服务器,但我希望根本原因是相同的。
(*
.??*
匹配一个点和至少两个其他字符,.[!.]
匹配一个点和一个不是点的字符。在正则表达式中,*
含义?
略有不同。)