将文件和目录移动到UNIX中的子文件夹

时间:2011-01-24 21:39:19

标签: shell unix mv

当我输入

mv ../* . 
mv: cannot move '../<dir name>' to a subdirectory of itself, './<dir name>'

shell / mv命令如何检测此行为?

2 个答案:

答案 0 :(得分:1)

据我所知,mv使用rename() POSIX系统调用,规范说明了这一点:

  

如果出现以下情况,则rename()函数将失败:

     

(...)

     

[EINVAL] [CX]新目录   pathname包含路径前缀   命名旧目录。

......以及无数其他详细的失败模式。

操作系统可能通过比较层次结构中间目录的inode编号来实现一般VFS层的检测。

答案 1 :(得分:1)

在将命令行传递给*之前,shell负责扩展mv之类的通配符,并且它只根据存在的文件/目录直接执行,而不知道程序是什么或者它可能想用这些名字做什么。因此,在这种情况下,../*将扩展到父目录中的每个文件/目录名称,包括当前目录&lt; dir name&gt; 。然后mv遍历它收到的参数列表,尝试将除最后一个之外的每个参数移动到最后一个,这会导致您看到的错误。