如何获取mv(或*通配符)来移动隐藏文件?

我正在将我的主目录从旧系统迁移到新系统,我制作的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 -aa/ b/ 

我看到了这个:

 a/: . .. .foo b/: . .. bar 

a/.foo没动。 那么如何才能获得*通配符来查找隐藏文件?

是的,我想我可以将tarball直接解压缩到我的主目录,但tarball解压缩到home/rcook/... ,我想确保用旧的自定义版本覆盖新的.bashrc等,并且知道如何查找和移动隐藏文件是一项有价值的技能。 建议?


一些答案建议做一些像mv src/.* dest/ 。 但是,我在我的测试目录上尝试了这个并且出错了。 从…开始:

 rcook$ ls -aa/ b/ a/: . .. bar .foo b/: . .. rcook$ mv a/.* b/ mv: cannot move 'a/.' to 'b/.': Device or resource busy mv: cannot remove 'a/..': Is a directory rcook$ ls -aa/ b/ a/: . .. bar b/: . .. .foo 

我究竟做错了什么?

你可以这样做 :

 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 )开头的文件,也可以使用模式..?*

在你的添加中,你有错误,但代码仍然有效。 唯一要添加的是你告诉它只复制点文件。 尝试:

 mv src/* src/.* dst/ 

你仍然会得到错误。 和..条目,这很好。 但此举应该会成功。

 ~/scratch [andrew] $ mv from/* from/.* to/ mv: cannot move 'from/.' to 'to/.': Device or resource busy mv: cannot remove 'from/..': Is a directory ~/scratch [andrew] $ ls -a from/ to/ from/: . .. to/: . .. test .test 

如果你在目录中使用ls -l ,你会看到...列出的文件。 所以,我认为mv .* /dest会考虑这些指针。 尝试:

 mv /tmp/home/rcook/{*,.[^.]*,..?*} /home/rcook/ 

这将忽略那些当前和父目录指针。

如果三种模式*[^.]*..?*中的任何一种都不匹配任何文件,则会出现错误,因此您应该只包含匹配的模式。

我能想到的两种可能的解决方案。 第一种是使用cp代替其递归选项,将当前目录复制到目标。

 cp -Rp . /desired/directory 

然后您可以删除当前目录中的源文件

或者,如果您知道这些文件的名称是合理的(没有空格,通配符,不可打印的字符),您可以执行以下操作:

 mv $(ls -A) /desired/directory 

Linux上没有“隐藏”文件这样的东西。 默认情况下,以点开头的文件只是从文件列表中隐藏。

要使用glob复制文件,您需要为文件添加前缀. 例如mv -u .* foo然后foo/.foo在移动时会显示为foo/.foo

-u选项仅在源较新或目标丢失时才移动文件。 或者你可以忽略有关移动的错误...因为它们是特殊文件,无法移动,但是被shell捕获.* glob。

所以我们有:

 a |-- .foo `-- bar 

和:

 b 

我花了很多时间找到比这里所有答案更好的解决方案。

然后我花了30秒来完成这个命令:

 $ mv --help 

然后我找到了我的爱:

 $ mv a/ b/ -T 

注意:我甚至不理解参数-T 。 它只是做了我需要的。 这里说:

-T, – no-target-directory 将DEST视为普通文件

如果要将包含隐藏文件的文件复制到您所在的当前目录中。

 cp -Rp source-directory/. .