ルールリストを使用してバッチファイルの名前を変更する

ルールリストを使用してバッチファイルの名前を変更する

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. youtube次へ交換YT
  2. 後の最初の文字を大文字で表記-music-
  3. 後の最初の文字を大文字で表記-directed-by-

mozart明らかに、これは合計と一致しませんkarazan。作曲家や芸術家、監督の名前を大文字で表記します。

最後の2つの修飾子は/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

関連情報