使用规则列表批量文件重命名

使用规则列表批量文件重命名

有没有办法使用 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以下操作:

  1. 替换youtubeYT
  2. 之后的第一个字母大写-music-
  3. 之后的第一个字母大写-directed-by-

显然,这不仅仅匹配mozartkarazan。它将任何作曲家或艺术家以及任何导演的名字大写。

最后两个使用/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

相关内容