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