이름 바꾸기 명령은 하위 문자열을 제거합니다.

이름 바꾸기 명령은 하위 문자열을 제거합니다.

다음 파일의 이름을 일괄적으로 바꾸려고 합니다.

art-faculty-3_29060055362_o.jpeg  
fine-arts-division-faculty-2016-2017-5_29165851925_o.jpeg  
theatre-faculty-2016-2017-1_29132529356_o.jpeg
art-history-faculty-2016-2017-1_29060057642_o.jpeg         
music-faculty-2016-2017-1_29132523816_o.jpeg

이름을 다음과 같이 바꾸고 싶습니다.

art-faculty.jpeg                           
fine-arts-division-faculty.jpeg
theatre-faculty.jpeg
art-history-faculty.jpeg  
music-faculty.jpeg

이것이 내가 지금까지 가지고 있는 것입니다:

rename -n -D '/faculty(.*)/g' -X -v *

그러면 다음이 반환됩니다.

Using expression: sub { use feature ':5.18'; s/\/faculty\(\.\*\)\/g//g; s/\.   ([^.]+)\z//x and do { push @EXT, $1; $EXT = join ".", reverse @EXT } }
'art-faculty-3_29060055362_o.jpeg' unchanged
'art-history-faculty-2016-2017-1_29060057642_o.jpeg' unchanged
'fine-arts-division-faculty-2016-2017-5_29165851925_o.jpeg' unchanged
'music-faculty-2016-2017-1_29132523816_o.jpeg' unchanged
'theatre-faculty-2016-2017-1_29132529356_o.jpeg' unchanged

삭제(-D) 변환에 REGEX를 사용할 수 있나요?그렇다면 위에 표시된 변환을 수행하는 데 어떻게 사용합니까? 그렇지 않은 경우 renameREGEX를 사용하여 변환을 수행하는 올바른 방향을 알려주세요 .

빠른 참조

답변1

for i in *.jpeg; do echo mv "$i" "${i%faculty*}faculty.jpeg" ; done

요구 사항을 충족하는 경우 삭제 echo하여 파일 이름을 변경하세요.


내 시스템의 perl rename 명령에는 옵션만 있습니다.-v -f -n

$ rename -n 's/faculty\K.*(?=\.jpeg)//' *.jpeg
art-faculty-3_29060055362_o.jpeg renamed as art-faculty.jpeg
art-history-faculty-2016-2017-1_29060057642_o.jpeg renamed as art-history-faculty.jpeg
fine-arts-division-faculty-2016-2017-5_29165851925_o.jpeg renamed as fine-arts-division-faculty.jpeg
music-faculty-2016-2017-1_29132523816_o.jpeg renamed as music-faculty.jpeg
theatre-faculty-2016-2017-1_29132529356_o.jpeg renamed as theatre-faculty.jpeg

관련 정보