我正在将我的主目录从旧系统迁移到新系统,我制作的tarball包含所有内容,包括.bashrc等隐藏文件。但是,当我将解压缩的tarball(在/ tmp中)的内容移动到我的新主目录时,隐藏文件不会复制(mv /tmp/home/rcook/* /home/rcook/
)。我怎样才能让mv移动它们?
实际上,我认为问题不在于mv,而在于bash的全局。如果我这样做:
mkdir a
mkdir b
touch a/.foo
touch a/bar
mv a/* b/
ls -a a/ b/
我明白这一点:
a/:
. .. .foo
b/:
. .. bar
a/.foo
没有移动。那么如何才能获得*通配符来查找隐藏文件?
是的,我想我可以将tarball直接解压缩到我的主目录,但tarball解压缩到home/rcook/...
,我想确保覆盖新的.bashrc
等,使用旧的自定义版本,并且知道如何查找和移动隐藏文件是一项有价值的技能。建议?
有些答案建议做像mv src/.* dest/
这样的事情。但是,我在我的测试目录上尝试了这个并且出错了。从:
开始
a/:
. .. .foo
b/:
. .. bar
我做错了什么?
你可以这样做:
shopt -s dotglob
mv /tmp/home/rcook/* /home/rcook/
你可以把
shopt -s dotglob
在你的~/.bashrc
中,如果你想让它成为默认值。
请参阅http://mywiki.wooledge.org/glob
复制点文件的另一种方法:
mv /tmp/home/rcook/.[!.]* /home/rcook/
不要使用模式..*
,因为它匹配..
(指向父目录的指针)。如果有名称以两个点开头的文件(..something
),也可以使用模式..?*
。