Linux 使用重命名重命名文件和目录

Linux 使用重命名重命名文件和目录,linux,bash,rename,Linux,Bash,Rename,我正在使用Linux重命名命令行工具递归地搜索一个目录,以重命名它找到的任何目录和文件。我遇到的问题是rename命令将重命名文件的子目录,然后尝试重命名同一文件的父目录。此操作将失败,因为子目录已重命名,导致“没有这样的文件或目录” 命令: rename -f 's/foo/bar/' ** rename -f 's/Foo/Bar/' ** 例如,这里有一个原始文件,我想用“bar”替换“foo” 文件: 失败: Can't rename /test/foo/com/test/foo/Fo

我正在使用Linux重命名命令行工具递归地搜索一个目录,以重命名它找到的任何目录和文件。我遇到的问题是rename命令将重命名文件的子目录,然后尝试重命名同一文件的父目录。此操作将失败,因为子目录已重命名,导致“没有这样的文件或目录”

命令:

rename -f 's/foo/bar/' **
rename -f 's/Foo/Bar/' **
例如,这里有一个原始文件,我想用“bar”替换“foo”

文件:

失败:

Can't rename /test/foo/com/test/foo/FooMain.java /test/bar/com/test/foo/FooMain.java: No such file or directory
首选文件:

/test/bar/com/test/bar/BarMain.java

您可以从错误消息中看到,它正试图重命名父目录,但此时子目录已被更改,导致“找不到文件”错误。重命名命令是否有参数可以解决此问题,或者我是否需要以其他方式解决此问题?

使用find+execdir选项:

$ find . -execdir rename "s/foo/bar/" {} \;
$ find . -execdir rename "s/Foo/Bar/" {} \;

编程问题也是如此,而不是关于使用Unix工具的问题。Unix.stackexchange.com或SuperUser.com更合适。移动到
$ find . -execdir rename "s/foo/bar/" {} \;
$ find . -execdir rename "s/Foo/Bar/" {} \;