移动目录的Linux命令

26

我旧的目录和新的目录里面都有相同的文件夹和文件。

我尝试了:

mv -if old/* new/*

我尝试移动文件时出现了错误:

mv: cannot move `./xxxxxx' to a subdirectory of itself

该怎么移动它呢?


11
这是一个非常好的问题,适合在StackOverflow上提问。虽然这可能是一个天真的错误,但这正是SO存在的意义;它通过允许人们提问并从答案中学习来帮助人们克服天真。请参考SO博客和Podcast#53(Joel表示没有任何问题对于Stack Overflow来说都太简单了……)。 - Jonathan Leffler
3
如何编写shell程序——在Stack Overflow上是可以的。 - Jonathan Leffler
1
如果“mv”是编程外壳程序,我就把帽子吃了(如果我有的话)。 - Nick Johnson
2
如果你不喜欢这个问题,就投反对票然后继续前进。 - TheSoftwareJedi
显示剩余5条评论
5个回答

32

你应该使用 mv -if old/* new/ 而不要加上结尾的 *

这是因为它会展开成

mv -if old/foo old/bar old/baz new/foo new/bar new/baz

即将所有内容移动到新目录new/baz。

这不是您想要的。


2
“不工作”是毫无用处的。它在说什么?当你尝试时会发生什么? - alamar

6
reef@localhost:/tmp/experiment$ ls a
11  22  33
reef@localhost:/tmp/experiment$ ls b
22  33
reef@localhost:/tmp/experiment$ ls
a  b
reef@localhost:/tmp/experiment$ mv a/* b
reef@localhost:/tmp/experiment$ ls a
reef@localhost:/tmp/experiment$ ls b
11  22  33

它起作用了。你想要实现什么?能否请您写一个简短的示例,说明输入数据应该是什么样子以及输出数据应该是什么样子?事实上,我不知道你想做什么 :) 帮助我帮助你。


4
请注意,mv a/* b/不会移动以点(.)开头的文件(文件名以.开头)在a/中到b/中。
例如:
$ mkdir -p a/d b && touch a/f a/.f a/d/.f
$ mv a/* b/
$ ls -a a/
.  ..  .f

1

如果你从一个ext2/3/4文件系统复制到一个FAT32文件系统,并且文件名包含FAT32命名约定中的无效字符,你会得到这个非常恼人和不正确的错误消息。我怎么知道的?我与这个BUG - 是的,它是一个KERNEL BUG - 搏斗了6个小时,直到我意识到。我以为这是一个shell解释器错误,我以为这是一个“mv”错误 - 我尝试了多个不同的shell,一切都试过了。试试这个实验:在一个ext文件系统上,“touch 'a:b'”,然后将其“mv”到一个FAT32文件系统中。试试吧,你会喜欢(讨厌)结果的。对于'<'和'>'(\074和\076),情况也是如此。

感谢“man mv” - 这真的很有帮助,不要放弃你的日常工作。


1
可能你已经得到了答案,但是上面的答案对我不起作用... 经过大量的研究,我终于找到了答案。(问题是由于文件所有权引起的)
只需要在命令前加上sudo就可以了... :) 对于cp和mv命令也是同样的道理。
sudo mv -if old/* new/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接