파일 이름을 소문자 확장자로 바꾸려면 "이름 바꾸기"를 사용하십시오.

파일 이름을 소문자 확장자로 바꾸려면 "이름 바꾸기"를 사용하십시오.

현재 대규모 파일 그룹의 이름을 바꾸려고 하는데 다음과 같이 다소 서투른 방법을 사용하고 있습니다.

rename 's:(.*)\.MOV:$1.mov:g' *.MOV
rename 's:(.*)\.JPG:$1.jpg:g' *.JPG

제가 정말로 원하는 것은 다음을 사용하여 이러한 모든 명령을 결합할 수 있는 것입니다.'y' sed연산자. 분명히 이 연산자를 사용하면 항목을 소문자로 변환할 수 있습니다. 문제는 확장자를 변환하기만 하면 된다는 것입니다. 이 명령을 사용하여 이를 수행할 수 있는 방법이 있습니까? 다음 표현식의 캡처 그룹을 소문자로 변환해야 합니다 ^.+\.(.+)$. 이를 수행할 수 있는 방법이 있습니까? 나는 이러한 변화에 조금 익숙합니다.

답변1

rename구문론적으로 이는 Debian, Ubuntu 및 그 파생 버전의 Perl 기반 버전입니다. 당신은 사용할 수 없습니다tr운영자전체 문자열에 작용하기 때문입니다. 하지만 넌 할수있어경기 확장, 소문자로 입력하세요.그리고\L.

rename 's/\.[^.]*$/\L$&/' *.JPG *.MOV

여기서는 불필요하지만 정규식이 소문자로 표시하려는 부분보다 더 많이 일치하는 경우 일치하려는 부분을 넣을 수 있습니다.그룹:

rename 's/\.([^.]*)$/.\L$1/' *.JPG *.MOV

확장자에 관계없이 모든 파일에 대해 작동하려면 다음 *.JPG *.MOV으로 바꾸십시오 . *.*bash ≥4.3(및 bash 4.0-4.2에서는 디렉터리의 심볼릭 링크도 통과함)에서 하위 디렉터리의 파일 등에 대해 쉽게 재귀적으로 작업할 수 있습니다.

rename 's/\.[^.]*$/\L$&/' **/*.*

~을 위한zsh 팬( :r그리고:e 수정자파일의 나머지 부분에서 확장자를 분리합니다.

autoload zmv
zmv '*.(MOV|JPG)' '${f:r}.${(L)f:e}'      # these extensions, current directory
zmv '*.*' '${f:r}.${(L)f:e}'              # all extensions, current directory
zmv '**/*.*' '${f:r}.${(L)f:e}'           # all extensions, recursive directory traversal

관련 정보