mv: 'path1/path2/filename1' 和 '/home/user1/dir1/path1/path2/filename1' 是同一个文件

mv: 'path1/path2/filename1' 和 '/home/user1/dir1/path1/path2/filename1' 是同一个文件

使用命令后:

find path1/ -iname 'file*[1234]' -exec mv -t /home/user1/dir1/path1/path2 {} \;

我收到一个错误,这些文件是相同的。命令成功完成。搜索开始的父目录是path1/,然后作为目标目录,我将整个绝对路径放在我想要移动文件的位置。为什么会发生这种情况?

答案1

也就是说mv,移动特定文件是没有意义的,因为将其移动到目标会将其写回自身。

如果你尝试,你会得到同样的结果

mv file file

对于任何名为file.

至于为什么有时候是这样的:

find在路上奔跑path1。我假设这path1与绝对路径中的相同/home/user1/dir1/path1/path2

如果您的文件/home/user1/dir1/path1/path2名称与您使用的模式匹配(这些文件可能已通过先前调用您的find命令,甚至通过相同的 find由于目录遍历的顺序使得),那么这些将通过(since是 的子目录)find找到。这将提示尝试执行将文件从 移动到 的命令。这就是触发该消息的原因(我犹豫是否称其为实际的“错误”)。findpath2path1findmvpath2path2

避免调查path2with find,你可以这样做:

find path1 \( -type d -path 'path1/path2' -prune \) -o -iname 'file*[1234]' -exec mv -t /home/user1/dir1/path1/path2 {} +

如果找到的内容是目录 ( -type d) 并且它是路径名,则从遍历目录时构建的path1/path2目录搜索树中删除它。find否则,像以前一样继续(几乎,我将最后一个更改\;+以便mv一次获取尽可能多的路径名)。

相关内容