모든 파일의 이름을 소문자로 바꾸려면 어떻게합니까?


123

예를 들어 TREE.wav, ONE.WAV가 있습니다. 이름을 tree.wav, one.wav로 바꾸고 싶습니다. 모든 파일의 이름을 소문자로 바꾸려면 어떻게합니까?


1
터미널 / 쉘 솔루션에 익숙하십니까? 아니면 C / Objective-C 코드가이를 수행하기를 원하십니까?

터미널 솔루션은 괜찮을 것입니다.
Voloda2 2011 년

3
다시 열어야한다고 생각합니다. 터미널 코드도 코드입니다
Danield 2010 년

1
이것은 stackoverflow에 대한 유효한 질문이어야합니다. 이것은 또한 코드입니다.
adev

답변:


371

터미널에 익숙한 경우 :

  1. Terminal.app을 열고 cd이름을 바꿀 파일이있는 폴더를 입력 한 다음 끌어서 창에 놓습니다.
  2. 올바른 디렉토리에 있는지 확인하려면 입력 ls하고 Enter 키를 누르십시오.
  3. 이 코드를 붙여넣고 Enter를 누르십시오.

    for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
  4. 모든 파일이 소문자인지 확인하려면 ls입력하고 다시 Enter 키를 누르십시오.

(몇 가지 수정 사항에 대해 트위터의 @bavarious에게 감사를 표하고 대소 문자를 구분하지 않는 파일 시스템에서 더 안전하게 만든 아래의 John Whitley에게 감사드립니다.)


9
조심해. foo.txt및 이라는 파일 FOO.TXT이있는 경우이 중 하나를 방해 할 수 있습니다.
Keith Thompson

1
bash를 사용하면 다음을 수행 할 수 있습니다. mv "$f" "${f,,}", 또는declare -l g=$f; mv "$f" "$g"
glenn jackman 2011 년

2
이 모든 명령을 시도했는데 "mv : 'PPP.txt'와 'ppp.txt'가 같은 파일입니다."라는 메시지가 표시되고 내 파일을 소문자로 처리하지 않습니다. 아이디어가 있습니까? 같은 디렉토리에 있기 때문입니까?
lorless 2013-08-08

1
user2066039 : 1 년이 지난 대부분의 답변은이를 설명하지 않기 때문에 이것은 Mac에서 최근의 것이어야합니다. 'jpg1'과 같은 중간 확장자를 사용하여 작업을 수행했습니다. 그래서, JPG-> jpg1-> jpg. 도움이되기를 바랍니다.
Joyce

14
OS X 사용자 인해 대소 문자를 구분 파일 시스템에 먼저 임시 이름으로 각 파일의 이름을 변경해야한다, 예를 들면 : for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
존 휘 틀리

10

묻는 질문은 일반적이며 중요하므로보다 일반적인 답변을 제공하고자합니다.

가장 간단한 경우 (대부분의 경우 안전하며 Mac OS X에서는 계속 읽으십시오) :

for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done

파일 이름의 공백도 처리해야합니다 (모든 OS) :

IFS=$'\n' ; for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done

대소 문자를 구분하는 파일 시스템에서 대소 문자 만 다른 파일 이름을 안전하게 처리하고 대상 (예 : Linux)을 덮어 쓰지 않아야합니다.

for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done 

Mac OS X에 대한 참고 :

Mac의 파일 시스템은 대소 문자를 구분하지 않고 대소 문자를 유지합니다.

허용 대답 및 의견 제안의 경우 만 다른 두 개의 파일 이름이 처음부터 존재하지 수 있기 때문에, 그러나, 필요, 임시 파일이 생성되지 것입니다 심판 .

이를 표시하려면 :

$ mkdir test
$ cd test
$ touch X x
$ ls -l 
total 0
-rw-r--r--  1 alexharvey  wheel  0 26 Sep 20:20 X
$ mv X x
$ ls -l 
total 0
-rw-r--r--  1 alexharvey  wheel  0 26 Sep 20:20 x

예-그러나 귀하의 예에서는 'mv X x'를 사용하여 파일 이름을 소문자로 지정할 수 있다고 제안합니다. 그래서 제가 댓글을 단 것은 그뿐이었습니다.
cpaludan 19

mojave 10.14.5 : # touch X x # ls -la total 0 -rw-r--r-- 1 root root 0 Jun 24 15:19 X # mv X x mv : 'X'와 'x'는 동일 파일 번호 ls -la -rw-r--r-- 1 루트 루트 0 Jun 24 15:19 X
cpaludan

형편없는 형식으로 죄송합니다. 그래서 나에게 친절하지 않았습니다.
cpaludan 19

1
그리고 내 나쁜-공유 드라이브 (hfsplus 형식)의 내 라즈베리에서 ssh에있었습니다-작동하지 않습니다. 그러나 내 Mac에서는 로컬로 수행됩니다.
cpaludan 19

for i in *; do j = $ (tr '[: upper :]' '[: lower :]'<<< "$ i"); mv "$ i" "$ j"; 카탈리나에서 저를 위해 일했습니다. 감사.
Sinan Eldem

2

어패류 버전 :

for old in *
    set new (echo $old | tr '[A-Z]' '[a-z]')
    mv $old $new
end
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.