使用命令后:
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
找到。这将提示尝试执行将文件从 移动到 的命令。这就是触发该消息的原因(我犹豫是否称其为实际的“错误”)。find
path2
path1
find
mv
path2
path2
到避免调查path2
with 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
一次获取尽可能多的路径名)。