2013-08-02 21 views
12

我想重新命名与匹配名称的basedir下的所有目录。例如:重命名多个匹配模式的目录

basedir/,我有:

- foo/bar/blah 
- my/bar/foo 
- some/bar/foo1 
- other/foo/bar 

我想改名匹配bar所有目录,但我想保留前缀部分。

随着find,我可以很容易地作出这样的所有目录的列表:

find . -name repositoryunit -type d 

但是,我该如何使用-exec mv {} ...(或者与其他应用程序相结合),以使前缀保留吗?

非常感谢提前!

回答

21
find . -name bar -type d -execdir mv {} baz \; 

-execdir改变目录到父在执行命令之前,所以这里的mv将是本地的每个父目录。

+0

请注意,如果在搜索的目录中已经有一个目录“baz”,那么“bar”将会被移入它。 – mkudlacek

+1

如果在执行命令后得到'find:'*****':...没有这样的文件或目录',则添加'-depth',它将在目录本身删除错误之前处理目录内容。 – lepe