有没有办法使用 txt 文件中编写的某些模板来重命名多个文件?我需要用一堆文件中的其他单词替换一些特定单词。我有 1000 多个文件,名称如下:
file1-music-mozart-directed-by-karajan-youtube.mp3
file2-music-beethoven-symphonies-youtube.mp3
我想将“Mozart”和“Karajan”大写,并将“youtube”替换为“YT”。另外,我想在将来需要时向上述文本文件添加一些新规则(模式)。但我并不坚持txt文件,这只是我的拙见......
答案1
$ ls -1
file1-music-mozart-directed-by-karajan-youtube.mp3
file2-music-beethoven-symphonies-youtube.mp3
$ rename -v -e 's/youtube/YT/;
s/(-music-)([[:alpha:]])/$1 . uc $2/e;
s/(-directed-by-)([[:alpha:]])/$1 . uc $2/e' *
file1-music-mozart-directed-by-karajan-youtube.mp3 renamed as file1-music-Mozart-directed-by-Karajan-YT.mp3
file2-music-beethoven-symphonies-youtube.mp3 renamed as file2-music-Beethoven-symphonies-YT.mp3
$ ls -1
file1-music-Mozart-directed-by-Karajan-YT.mp3
file2-music-Beethoven-symphonies-YT.mp3
perl
使用的代码执行rename
以下操作:
- 替换
youtube
为YT
- 之后的第一个字母大写
-music-
- 之后的第一个字母大写
-directed-by-
显然,这不仅仅匹配mozart
和karazan
。它将任何作曲家或艺术家以及任何导演的名字大写。
最后两个使用/e
搜索和替换运算符的修饰符,它告诉perl
将右侧(替换)作为 perl 表达式进行计算,因此我可以使用像uc
(大写)这样的 perl 函数。
如果您只想将一小部分单词的第一个字母大写,请使用如下所示的内容:
$ rename -v -e 's/youtube/YT/;
s/(mozart|karajan)/ucfirst($1)/eg;' *
file1-music-mozart-directed-by-karajan-youtube.mp3 renamed as file1-music-Mozart-directed-by-Karajan-YT.mp3
file2-music-beethoven-symphonies-youtube.mp3 renamed as file2-music-beethoven-symphonies-YT.mp3
$ ls -1
file1-music-Mozart-directed-by-Karajan-YT.mp3
file2-music-beethoven-symphonies-YT.mp3