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
。作曲家や芸術家、監督の名前を大文字で表記します。
最後の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