programing

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

mbctv 2023. 4. 11. 22:28
반응형

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

예를 들어 TREE.wav, ONE이 있습니다.WAV. 트리로 이름을 바꾸고 싶어요.wav, 1 . 820모든 파일의 이름을 소문자로 바꾸려면 어떻게 해야 합니까?

단말기가 익숙한 경우:

  1. Terminal.app을 열고 입력합니다.cd그런 다음 이름을 변경할 파일이 들어 있는 폴더를 창으로 끌어다 놓습니다.
  2. 올바른 디렉토리에 있는지 확인하려면lsEnter 키를 누릅니다.
  3. 이 코드를 붙여넣고 Enter 키를 누릅니다.

    for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
    
  4. 모든 파일이 소문자인지 확인하려면ls다시 입력해 주세요.

(트위터의 @bavarious에 의한 몇 가지 수정과 아래의 John Whitley에 의한 대소문자를 구분하지 않는 파일 시스템의 안전성 확보에 감사 드립니다.)

질문 내용은 일반적이고 중요하기 때문에 보다 일반적인 답변을 드리고 싶습니다.

가장 간단한 경우(대부분의 경우 안전하지만 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의 파일 시스템은 대소문자를 구분하지 않으며 대소문자를 구분하지 않습니다.

, 최초에 대소문자만 다른2개의 파일명은 존재할 수 없기 때문에 승인된 답변과 코멘트에서 제시된 대로 임시 파일을 작성할 필요가 없습니다.

이것을 표시하려면:

$ 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

어패류 버전:

for old in *
    set new (echo $old | tr '[A-Z]' '[a-z]')
    mv $old $new
end

현재 디렉토리와 서브 디렉토리의 모든 파일소문자를 붙이는 경우는, 다음의 순서에 따릅니다.

# lower case all files in current dir & subdirs
for d in ./**/ ; do (cd "$d" &&  for x in ./*/ ; do (cd "$x" && for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done); done); done

#list all directories
for f in ./**/ ; do echo $f; done

# lower case all files in a directory
for x in ./*/ ; do (cd "$x" && for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done); done

간단한 해결책은tr명령어를 지정합니다.

for file in ./* ; do
    mv "$file" "$(tr '[:upper:]' '[:lower:]' <<<"$file")"
done

자세한 것은 이쪽trcommand 여기서 tr 명령어 설명

이게 최선의 해결책이라고 생각합니다.

for i in *; do mv "$i" "${i,,}"; done

더 쉽고, 더 짧고, 더 깔끔한

언급URL : https://stackoverflow.com/questions/7787029/how-do-i-rename-all-files-to-lowercase

반응형