通过用另一个模式替换模式来递归重命名存储库和文件名

Rename recursively repository and file names by replacing a pattern by another

我想递归地重命名特定目录下包含给定模式的所有存储库和文件名。

我想我使用以下命令找到了一个潜在的解决方案 here

find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+

不过我好像没有正确的rename命令。

我安装了 Perl Rename 包,但我仍然没有可用的基于 Perl 的 rename 命令。我该怎么做才能使用这个命令?

这个 rename 解决方案是否有替代解决方案?

假设我有以下存储库和文件:

BOOK1/
BOOK1/BOOK1_summary.txt
BOOK1/BOOK1_chapter1/BOOK1_chapter1.txt

我想将所有出现的 BOOK1 重命名为 BOOK-01 在存储库和文件名中:

BOOK1-01/
BOOK1-01/BOOK1-01_summary.txt
BOOK1-01/BOOK1-01_chapter1/BOOK1-01_chapter1.txt

您可以使用可以从 this link.

下载的 rename PERL 实用程序
find  BOOK1 -depth -exec rename -n 's/^(.*)(BOOK1)(.*)$/BOOK1-01/' {} \;

干-运行输出

rename(BOOK1/BOOK1_summary.txt, BOOK1/BOOK1-01_summary.txt)
rename(BOOK1/BOOK1_chapter1/BOOK1_chapter1.txt, BOOK1/BOOK1_chapter1/BOOK1-01_chapter1.txt)
rename(BOOK1/BOOK1_chapter1, BOOK1/BOOK1-01_chapter1)
rename(BOOK1, BOOK1-01)

在验证 dry-运行 结果后,从 rename 中删除 -n 选项..

实际输出

 ls -R BOOK1-01/ # Used a recursive listing here.
BOOK1-01/:
BOOK1-01_chapter1  BOOK1-01_summary.txt

BOOK1-01/BOOK1-01_chapter1:
BOOK1-01_chapter1.txt

注意: find 的 -depth 选项是这里的关键。 find manpage 表示它在处理目录本身之前处理每个目录的内容。