배치 이름 바꾸기 파일을 소문자로 있습니까? oneliner 명령을 찾고 있습니다. TotalCommander를

디렉토리의 모든 파일 이름 을 소문자 | 대문자 로 바꾸는 방법이 있습니까?

oneliner 명령을 찾고 있습니다.

TotalCommander를 좋아했습니다 alt+f7. 이제 터미널에서 해당 기능이 필요합니다.



답변

a_file현재 디렉토리의 각 파일 이름 a_file을 소문자로 바꿉니다 .

for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;

대문자의 경우 인수를 [:lower:] [:upper:]

tr명령 참조 링크

최신 정보

더 많은 제어 *를 위해로 대체 할 수 있습니다 ls.

예를 들어 * .jpg 파일 만 필터링하기 위해 1.txt, 2.txt, 3.txt, 1.jpg, 2.jpg 및 3.jpg를 포함하는 디렉토리에서 ls다음을 사용할 수 있습니다.

for a_file in $(ls *.jpg);do mv -v $a_file `echo $a_file | tr [:upper:] [:lower:]` ;done;

위의 코드는 a_file확장자가 .jpg 인 모든 파일 을 변수에 할당합니다 .

제안 된 sds에 따라 명령에 추가 된 -v옵션을 업데이트하십시오 .mv


답변

보다 우아하고 일반적인 유틸리티가 prename있습니다.

Larry Wall이 작성 perl했으므로 시스템에서 이미 사용 가능할 가능성이 높습니다 /usr/bin/prename(설정 대안이있는 경우 /usr/bin/rename/ etc / alternatives를 통해 심볼릭 링크 로 사용할 수 있음 prename).

이를 사용하면 perl 표현식 (대체 s///또는 문자 음역 포함 tr///) 을 제공하여 하나의 명령으로 여러 파일의 이름을 바꿀 수 있습니다 .

예 :

# Lowercase all *.JPG filenames:
prename tr/A-Z/a-z/ *.JPG

# Change any 'No' in a filename to a 'Yes':
prename s/No/Yes/g *No*

# increment first sequence of digits in a filename by 3:
prename 's/([0-9]+)/$1+3/e' *[0-9]*

# If a file contains 'aaa', append '.bak' to its name
prename 'if (/aaa/) {$_ .= ".bak"}'  *

등등.

prename의 또 다른 좋은 점은 파일 이름을 기존 파일 이름으로 바꿀 경우 사용자를 보호한다는 것입니다.

man prename 상세 사항은.


답변

사용 find

find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;

에 대한 find

  • 물론 -name당신의 패턴 을 넣어 후 .
  • -maxdepth 0: 현재 디렉토리 만

에 대한 rename

  • -n, -nono: 조치 없음 : 이름을 바꿀 파일 이름을 인쇄하지만 이름을 바꾸지 마십시오.
  • y/source/dest/: 소스에 나타나는 패턴 공간의 문자를 대상 문자로 음역합니다.