파일 이름의 대문자를 소문자로 변경하는 방법은 무엇입니까?

파일 이름의 대문자를 소문자로 변경하는 방법은 무엇입니까?

디렉토리에 있는 파일 이름의 대문자를 소문자로 변경하는 명령은 무엇입니까? 감사해요

파일이 있습니다

F1
F2
FILE1
FILE2

이름을 바꾸고 싶습니다.

f1
f2
file1
file2

답변1

현재 디렉터리의 모든(숨겨지지 않은) 파일에 대해

zsh셸 에서는 다음을 수행할 수 있습니다.

autoload zmv # best in ~/.zshrc
zmv '*' '${(L)f}'

( zmv이름을 바꾸기 전에 충돌(예: 현재 디렉터리의 파일과 파일)이 있으면 중단합니다 FILE.File

( 디렉터리가 아닌 파일만 이름을 바꾸 *도록 변경하거나, 심볼릭 링크 확인 후 디렉터리가 아닌 파일의 이름을 바꾸도록 변경)*(#q^/)*(#q-^/)

그리고 mmv:

mmv '*' '#l1'

( 이 옵션을 전달 mmv하지 않으면 디렉토리(디렉토리에 대한 심볼릭 링크도 아님)의 이름이 바뀌지 않습니다 .)-r

Perl의 rename유틸리티 또는 그 변형(때때로 라고 함 prename)을 사용하십시오.

rename '$_ = lc $_' ./*

zmv, mmv()의 일부 변형은 선택적으로 rename가능합니다 .-n시운전그리고-v 말 수가 많은수행 중인 작업을 표시하는 옵션입니다.

일부 변형은 renameASCII 문자만 번역합니다. 예를 들어 다른 것들은 mmv로케일에 관계없이 입력을 UTF-8로 처리합니다. zmv아래의 다른 방법과 마찬가지로 로케일에 따라 올바르게 번역됩니다.

bash셸 에서 :

for f in *[[:upper:]]*; do
  # [ -f "$f" ] || continue # uncomment to skip non-regular files if needed
  # [ -L "$f" ] && continue # uncomment to also skip symlinks even
                            # if they resolve to regular files
  mv -i -- "$f" "${f,,}"
done

( -i파일을 덮어쓰기 전에 요청했지만 이름을 바꿀 때마다 일부 mv구현에서는 지원합니다 .-v 말 수가 많은수행 중인 작업을 표시하는 옵션입니다. GNU 구현에는 -T옵션이 있는데, 여기서도 사용하고 싶은 옵션이 있습니다 mv FOO foo.FOO를 foo 디렉터리로 이동합니다.foo현재 디렉토리에 디렉토리가 있는 경우).

kshin zsh및 쉘 bash:

typeset -l f
for F in *[[:upper:]]*; do
  # [ -f "$f" ] || continue # uncomment to skip non-regular files if needed
  # [ -L "$f" ] && continue # uncomment to also skip symlinks even
                            # if they resolve to regular files
  f=$F
  mv -i -- "$F" "$f"
done

( pdksh파생품은 ASCII 문자만 번역하지만)

POSIXly(파일 이름이 개행 문자로 끝나지 않는다고 가정):

tolower() {
  awk 'BEGIN{print tolower(ARGV[1])}' "$1"
}
for f in *[[:upper:]]*; do
  # [ -f "$f" ] || continue # uncomment to skip non-regular files if needed
  # [ -L "$f" ] && continue # uncomment to also skip symlinks even
                            # if they resolve to regular files
  mv -i -- "$f" "$(tolower "$f")"
done

일부 awk구현에서는 mawkASCII 문자만 변환합니다.

재귀(하위 디렉터리의 파일 이름도 바꿈)

(해야 할 일과 하지 말아야 할 일에 관한 이전 섹션을 읽어보는 것이 좋습니다. 대부분의 내용은 여기에도 적용됩니다.)

zsh zmv:

zmv '(**/)(*)' '$1${(L)2}'

파일 수가 많은 경우 zmodload zsh/files미리 실행하여 작업 속도를 높일 수 있습니다. 그러면 내장 버전이 활성화됩니다 mv( zmv실제로 이름 바꾸기를 수행하기 위해).

mmv(디렉토리가 아닌 경우에만 이름 바꾸기):

mmv ';*' '#1#l2'

findperl's 사용 rename (숨겨진 파일과 숨겨진 디렉토리에 있는 파일의 이름도 바꿈):

find . -depth -name '*[[:upper:]]*' -exec rename '
  s:[^/]+\Z:\L$&:' {} +

POSIXly(숨겨진 파일과 숨겨진 디렉터리의 파일 이름도 바꿈):

find . -depth -name '*[[:upper:]]*' -exec sh -c '
  for f do
    dir=${f%/*}
    name=${f##*/}
    newname=$(awk "BEGIN{print tolower(ARGV[1])}" "$name")
    mv -i -- "$f" "$dir/$newname"
  done' sh {} +

답변2

대안은 를 사용하는 것입니다 rename - Perl extension for renaming multiple files.

모든 파일 이름을 소문자로 변환하려면:rename 'y/A-Z/a-z/' *

설치하지 않으려면 다음을 수행할 수 있습니다.

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

관련 정보