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

时间:2019-04-17 13:33:30

标签: bash rename file-rename batch-rename

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

我认为我使用以下命令找到了可能的解决方案here

ss <- factor("X200801")

library(lubridate)
ymd(paste(sub("X", "", ss), "01", sep = ""))
#[1] "2008-01-01"

但是似乎我没有正确的find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+ 命令。

我安装了Perl 重命名软件包,但是我仍然没有基于Perl的rename命令。我该怎么做才能使用此命令?

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

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

rename

我想通过存储库和文件名中的 BOOK-01 重命名所有出现的 BOOK1

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

1 个答案:

答案 0 :(得分:1)

您可以使用rename PERL实用程序,该实用程序可以从this链接下载。

find  BOOK1 -depth -exec rename -n 's/^(.*)(BOOK1)(.*)$/$1BOOK1-01$3/' {} \;

空运行输出

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)

验证空运行结果后,从-n中删除rename选项。

实际输出

 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

注意:此处带有查找功能的-depth选项是关键。 find manpage说它在目录本身之前处理每个目录的内容。