규칙 목록을 사용하여 배치 파일 이름 바꾸기

규칙 목록을 사용하여 배치 파일 이름 바꾸기

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. 작곡가나 예술가, 감독의 이름을 대문자로 표기합니다.

마지막 두 수정자는 /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

관련 정보