重命名匹配模式的多个目录

car*_*ing 13 linux bash

我想重命名一个与名称匹配的basedir下的所有目录.例如:

basedir/,我有:

- foo/bar/blah
- my/bar/foo
- some/bar/foo1
- other/foo/bar
Run Code Online (Sandbox Code Playgroud)

我想重命名所有匹配的目录bar,但我想保留前缀部分.

有了find,我可以轻松地列出所有目录,如下所示:

find . -name repositoryunit -type d
Run Code Online (Sandbox Code Playgroud)

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

提前谢谢了!

Joh*_*ica 21

find . -name bar -type d -execdir mv {} baz \;
Run Code Online (Sandbox Code Playgroud)

-execdir在执行命令之前将目录更改为父目录,因此mv这里将是每个父目录的本地目录.