파일 확장자를 정리하려면 어떻게 해야 합니까?

파일 확장자를 정리하려면 어떻게 해야 합니까?

.MP3 파일이 포함된 디렉토리가 있고 해당 파일의 확장자를 .mp3로 변경하고 싶습니다. 이를 수행하는 가장 쉬운 방법은 무엇입니까? 제 생각에는 대략 다음과 같습니다.

find /RootPath -type f -iname "*.mp3" -exec mv {} sed s/.*MP3/\1.mp3/ \; 

...그 말이 옳지 않다는 걸 나도 알지만. :) 대체가 잘못되었습니다. 에서 a mv및 a 명령을 사용하는 방법을 잘 모르겠습니다 sed.-execfind

Bash 스크립트가 필요합니까?

답변1

Bash에서 이를 수행하는 한 가지 방법은 다음과 같습니다.

for i in *; do [ "${i/%MP3/mp3}" != "$i" ] && echo "$i" "${i/%MP3/mp3}"; done

여기서 사용하는 명령은 echo파일 이름 쌍을 인쇄하는 것 외에는 아무것도 수행하지 않습니다. 해당 목록이 원하는 변경 사항을 나타내는 경우 echo이와 유사한 것으로 변경할 수 mv -i --있으며 파일은 이동됩니다(덮어쓰기 전에 메시지가 표시됩니다).

간략한 설명:

for일치하는 모든 파일을 반복합니다 *. 그런 다음 확장자가 이미 소문자인지 확인하고, 그렇다면 계속하고, 그렇지 않으면 계속 이동합니다(또는 경우에 따라 에코합니다). 이는 Bash의 내장 문자열 조작을 사용하며, 여기에서 읽을 수 있습니다.http://tldp.org/LDP/abs/html/string-manipulation.html

답변2

zsh에서:

autoload zmv
zmv '(*).MP3' '$1.mp3'   # rename files in the current directory only
zmv '(**/)(*).MP3' '$1$2.mp3'  # rename files in subdirectories as well

또한 다음 사항에 유의하거나 .Mp3파일 을 제출하세요 .mP3.

zmv '(**/)(*).(#i)mp3' '$1$2.mp3'

답변3

당신이 사용할 수있는이름을 바꿔라명령을 실행합니다(다른 API를 사용하는 두 가지 주요 구현이 있음에 유의하세요). 예를 들어, 파일 확장자의 대소문자를 대문자에서 소문자로 변경하려면 다음을 시도하십시오.

  • 파일 이름에서 한 번만 발생한다고 가정되는 from (때때로 ) rename사용util-linuxrename.ul.JPG

    rename -- .JPG .jpg *.JPG
    
  • renamefrom을 사용하면 perl(때때로 라고도 하며 prename여러 변형이 게시되었습니다):

    rename 's/\.JPG$/.jpg/' ./*.JPG
    

여기 몇 가지가 있습니다얘들아 튜토리얼지저분한 bash 스크립트에서 귀하의 사용 사례에 맞게 간단한 명령으로 전환한 방법에 대해 설명합니다.

이를 수행하는 또 다른 멋진 명령은 다음과 같습니다.pax. 쉘이 ZSH를 사용하는 경우 zmv.

답변4

Linux에서 "확장자"는 실제로 파일 이름 문자열의 일부이기 때문에 스크립트가 필요합니다. 새 이름을 얻으려면 스크립트에서 일부 문자열 조작을 수행해야 합니다.

#!/bin/bash
for NAME in *.JPG
do
    PREFIX=${NAME%.*}
    NEWNAME="$PREFIX.jpg"
    mv "$NAME" "$NEWNAME"
done

파일 이름에 공백이 있으면 큰따옴표가 중요합니다. 큰 따옴표 중 일부가 약간 불분명하다고 생각합니다.

관련 정보