특정 문자열을 포함하는 모든 파일 이름의 확장자를 변경합니다.

특정 문자열을 포함하는 모든 파일 이름의 확장자를 변경합니다.

이름에 "x264"라는 문자열이 포함된 파일을 받으면 확장자를 ".mp4"로 변경하고 싶습니다(여기서 설명하기에는 너무 자세한 이유 때문입니다). 예:

Seinfeld_S02E05_x264.mkv ->Seinfeld_S02E05_x264.mp4

Seinfeld_S02E05_x264.avi ->Seinfeld_S02E05_x264.mp4

이러한 변경을 자동화하려면 어떤 스크립트를 사용할 수 있습니까? 내 컴퓨터는 FreeBSD 11.1을 실행하는 NAS4FREE 서버입니다.

업데이트(Jeff의 응답 이후): 지정된 디렉터리와 모든 하위 디렉터리에서도 작동하기를 원한다는 사실을 언급하는 것을 잊어버렸습니다. 스크립트 대신 명령을 사용할까요?

답변1

for f in *x264*.*
do
  mv -- "$f" "${f%.*}".mp4
done

위의 코드는 "glob" 모드에서 쉘 루프를 실행하여 일부 확장자 앞에 "x264"가 있는 파일을 찾습니다(나중에 확장자의 이름을 바꿀 수 있도록) mv. 이름을 바꾸고, 매개변수 확장을 사용하여 확장명(마침표 뒤에 아무 것도 붙음 *)을 제거한 다음 .mp4확장명을 수동으로 추가하세요.

답변2

사용 find:

find -type f -name "*x264*" -execdir sh -c 'echo mv -n "$1" "${1%.*}.mp4"' _ {} \;

이 옵션은 주어진 예제 파일의 이름이 단일 파일 이름으로 바뀌기 때문에 기존 파일을 덮어쓰는 것을 -n방지합니다 . 이 경우 첫 번째 파일이 삭제됩니다.mv

확장자(접미사)가 없는 파일에서 이 작업을 수행하려면 다음을 수행하십시오.

find -type f -name "*x264*" -execdir sh -c 'file="${1#./}"; 
    echo mv -n "$file" "${file%.*}.mp4"' _ {}  \;

위 항목을 제거하여 echo드라이런을 제거하고 파일 이름 바꾸기를 수행하세요.

관련 정보