Bash 通过将一个模式替换为另一个模式,以递归方式重命名存储库和文件名
我希望递归地重命名包含给定模式的特定目录下的所有存储库和文件名 我想我通过以下命令找到了一个潜在的解决方案:Bash 通过将一个模式替换为另一个模式,以递归方式重命名存储库和文件名,bash,rename,file-rename,batch-rename,Bash,Rename,File Rename,Batch Rename,我希望递归地重命名包含给定模式的特定目录下的所有存储库和文件名 我想我通过以下命令找到了一个潜在的解决方案: find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+ 但是,似乎我没有正确的rename命令 我安装了PerlRename软件包,但仍然没有基于Perl的Rename命令可用。要使用此命令,我可以做些什么 是否有此重命名解决方案的替代方案 假设我有以下存储库和文件: BOOK1/ BOOK1/BOOK1
find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+
但是,似乎我没有正确的rename
命令
我安装了PerlRename软件包,但仍然没有基于Perl的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
您可以使用重命名PERL
实用程序,该实用程序可以从链接下载
干运行输出
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)
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
验证干运行结果后,从rename
中删除-n
选项
实际产出
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)
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手册页
说它先处理每个目录的内容,然后再处理目录本身 “重命名”命令在我这边没有-n选项。我直接尝试不使用它,但它给了我以下错误消息:“重命名:参数不足”。此外,我看到您在“重命名”命令末尾使用了“3/s”。我认为这是因为在我的示例中,每条路径最多出现3次,对吗?如果有更多,我可以用“/g”来代替吗?它不是3/s
而是$3
。请注意,我使用了三个(stuff)
。括号内的任何内容都可以重复使用,第一次匹配使用$1
,第二次匹配使用$2
,依此类推。此处不应使用全局选项g
,因为它对该解决方案有害。@thbtmntgn我在find
命令中做了一个小更改。请试试新的。如果没有-n
选项,请在手册页中搜索重命名
,并查找提供干运行
选项的选项。在我删除的rename
脚本末尾有一个流氓s
。试试新的,如果你有任何运气,请告诉我:)我重新运行了你的命令,并得到了“重命名:没有足够的参数”错误。我使用的“重命名”命令似乎没有干运行选项。只有四个选项:-v/--verbose-->解释正在执行的操作,-s/--symlink-->对symlink目标执行操作,-h/--help-->显示此帮助并退出,-v/--version-->输出版本信息并退出安装“File::Rename”Perl包和“cpan”为我解决了问题。它在“/usr/local/bin”中创建了“rename”可执行文件