
.MP3 파일이 포함된 디렉토리가 있고 해당 파일의 확장자를 .mp3로 변경하고 싶습니다. 이를 수행하는 가장 쉬운 방법은 무엇입니까? 제 생각에는 대략 다음과 같습니다.
find /RootPath -type f -iname "*.mp3" -exec mv {} sed s/.*MP3/\1.mp3/ \;
...그 말이 옳지 않다는 걸 나도 알지만. :) 대체가 잘못되었습니다. 에서 a mv
및 a 명령을 사용하는 방법을 잘 모르겠습니다 sed
.-exec
find
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-linux
rename.ul
.JPG
rename -- .JPG .jpg *.JPG
rename
from을 사용하면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
파일 이름에 공백이 있으면 큰따옴표가 중요합니다. 큰 따옴표 중 일부가 약간 불분명하다고 생각합니다.