![두 번째 또는 세 번째 문자 이전의 모든 항목을 제거하여 파일 이름을 바꾸려면 어떻게 해야 합니까?](https://linux55.com/image/180407/%EB%91%90%20%EB%B2%88%EC%A7%B8%20%EB%98%90%EB%8A%94%20%EC%84%B8%20%EB%B2%88%EC%A7%B8%20%EB%AC%B8%EC%9E%90%20%EC%9D%B4%EC%A0%84%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%ED%95%AD%EB%AA%A9%EC%9D%84%20%EC%A0%9C%EA%B1%B0%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%94%EA%BE%B8%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
다음 이름을 가진 다른 폴더에 있는 파일 목록이 있습니다.
aaaaaa_bb_cccc_ddddd_ee.jpg
그 중 일부에서는 두 번째 이전에 모든 것을 제거해야 합니다.
cccc_ddddd_ee.jpg
다른 경우에는(이미 별도의 폴더에 있음) 세 번째 폴더 이전의 모든 항목을 삭제해야 합니다 _
ddddd_ee.jpg
일부 정규식을 사용하는 rename과 같은 명령에 대해 알고 있지만 이 경우의 정확한 표현은 모릅니다. Linux 터미널에서 이 작업을 어떻게 수행할 수 있나요?
답변1
Perl 이름 바꾸기 유틸리티를 사용하여
$ ls
aaaaaa_bb_cccc_ddddd_ee.jpg
$ rename -n 's/([^_]*_){2}//' *
rename(aaaaaa_bb_cccc_ddddd_ee.jpg, cccc_ddddd_ee.jpg)
$ rename -n 's/([^_]*_){3}//' *
rename(aaaaaa_bb_cccc_ddddd_ee.jpg, ddddd_ee.jpg)
이 -n
플래그는 Rename이 수행할 작업을 출력하도록 지시합니다. 삭제하면 -n
수정사항이 적용됩니다.
*
현재 디렉토리의 모든 파일로 확장 됩니다 . 위의 예에는 파일이 하나뿐이지만 이름 바꾸기는 한 번의 실행으로 여러 파일에 대해 작업을 수행할 수 있으며 이 경우 *
셸 루프보다 빠릅니다.
s/([^_]*_){2}//
의미: 파일 이름에 있는 s
모든 정규 표현식을 아무것도 없는 것으로 바꿉니다. ([^_]*_){2}
정규식은 밑줄이 아닌 임의의 수 [^_]*
와 _
밑줄이 두 번 반복됨을 의미합니다.
답변2
두 번째까지 모두 제거_
rename -n 's/[^_]*[_][^_]*[_]//' *
세 번째 전에 모든 것을 제거하십시오_
rename -n 's/[^_]*[_][^_]*[_][^_]*[_]//' *
효과적으로 제거하면 -n
테스트뿐만 아니라 파일 이름도 변경됩니다.