我想在包含给定模式的特定目录下递归重命名所有存储库和文件名。
我认为我使用以下命令找到了可能的解决方案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
答案 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
说它在目录本身之前处理每个目录的内容。