find -exec mv告诉我没有这样的文件或目录

时间:2017-08-07 22:07:11

标签: unix find mkdir mv

如果我跑:

def naturalNames = Person.gormPersistentEntity.persistentPropertyNames.collect { grails.util.GrailsNameUtils.getNaturalName(it) } //returns ['First Name', 'Last Name'...] def capitilizedNames = Person.gormPersistentEntity.persistentProperties.collect{ it.capitilizedName } //returns ['FirstName', 'LastName'...]

我明白了:

mkdir -p "$HOME"/old_foo && find "$HOME" -type d -name "*foo" -exec mv -vi {} "$HOME"/new_foo \;

但也是:

/Users/medialab/old_foo -> /Users/medialab/new_foo

为什么find: /Users/medialab/old_foo: No such file or directory在移动目录后搜索目录old_foo?

2 个答案:

答案 0 :(得分:1)

这似乎与此处的问题类似:Why does find -exec mv {} ./target/ + not work ? (on cygwin)

正如作者所指出的,你可以使用gnu mv

我个人更喜欢使用xargs,如下所示:

mkdir old_foo && find . -type d -name "*foo" -print0 | xargs -0 -I {} mv {} new_foo

答案 1 :(得分:0)

对于您的问题,我认为find也在目录内尝试匹配模式。 find尝试进入目录内部时,该目录不在此处,因为他已经被移动。

可以看到,如果使用:

find "$HOME" -mindepth 1 -maxdepth 1 -type d -name "*foo" -exec mv -vi {} "$HOME"/new_foo \;

该命令强制find保留在您的库中,并且不要在所有库中进行探索。