폴더에있는 모든 파일의 모든 파일 확장자를 빠르게 변경할 수 있습니까?


14

현재 형식으로 내 Android 휴대 전화에서 재생되지 않는 .m4b 오디오 북의 큰 폴더가 있습니다. 그러나 이름이 .m4a로 바뀌면 제대로 작동합니다.

폴더의 모든 .m4b 파일의 이름을 .m4a로 바꿀 수있는 빠른 방법 또는 터미널 명령이 있습니까? 파일을 변환 할 필요가 없으며 파일 확장명을 바꾸면 완벽하게 작동합니다.


2
참고 : renamePERL 스크립트이며 정규식을 허용합니다. 데비안 시스템 rename.ul에는 util-linux-ng package. perl이 설치되어 있지 않으면 (ok, 가능성이 거의 없습니다)) rename.
Rinzwind

답변:


16

이것은 당신을 위해 일을 할 것입니다.

rename 's/.m4b$/.m4a/' *.m4b

테스트 실행을 위해 다음 명령을 사용할 수 있습니다.

rename 's/.m4b$/.m4a/' *.m4b -vn

-v "verbose"를 의미하며 파일 이름을 바꾸면 파일 이름이 출력됩니다.

-n 파일 이름을 바꾸지 않는 테스트 실행을 수행하지만 이름이 바뀔 파일 목록을 표시합니다.


내 것보다 훨씬 더 나은 답변. 나는 게으르고 정규 표현식을 사용하지 않으려 고 노력했습니다 ...
adempewolff

감사합니다. 노력에 대한 @adempewolff에게 감사드립니다
coversnail

10

파일의 이름을 바꾸는 가장 빠른 방법은 필요한 모든 것을 다른 형식으로 변환 할 필요가없는 경우 Bash의 wiki 에서 자세히 설명하는 Bash의 매개 변수 확장을 사용하는 것 입니다 .

확장을 변경하는 방법에는 여러 가지가 있지만 여기서는 간단한 ${var/original/replacement}패러다임을 사용합니다.

for file in *.m4b; do mv -- "${file}" "${file/%m4b/m4a}"; done

명령에 의해 변경 될 사항 을 보려면 echo앞에 mv두고 변경 사항을 나열하십시오.

말할 것도없이이 oneliner는 다른 파일에 대해서도 수정 될 수 있으며 매개 변수 확장을 사용하여 파일 확장자를 제거 할 수도 있습니다.


+1이 방법은 @Basharat Sial의 답변과 동일하게 작동하지만 파일 일치가 많은 경우에도 작동합니다 *.m4b. 그렇지 않으면 오류가 발생 argument list too long합니다.
matt는

또한, 발생하는 상황을 보려면 자세한 플래그를 추가하십시오.for file in *.m4b; do mv -v -- "${file}" "${file/%m4b/m4a}"; done
matt burns
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.