배치 이름 바꾸기 파일을 소문자로


17

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

oneliner 명령을 찾고 있습니다.

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

답변:


20

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


4
"-v"를 전달하여 mv수행중인 작업을 확인할 수 있습니다. 당신이 할 수 없는 이 기존 파일을 소지품 수 있기 때문에 "-f"전달하려는
SDS

이름에 공백이있는 파일에는 작동하지 않습니다.
Tianxiang Xiong

파일 이름 주위에 따옴표를 사용할 수 있습니다.
Stef K

2
죄송하지만 ls * jpg에 대한 부분은 나쁜 생각입니다. mywiki.wooledge.org/ParsingLs * jpg를 사용하면 처음에 *를 가지고 같은 결과를 얻을 수 있습니다.
tink

16

보다 우아하고 일반적인 유틸리티가 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 상세 사항은.


1

사용 find

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

에 대한 find

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

에 대한 rename

  • -n, -nono: 조치 없음 : 이름을 바꿀 파일 이름을 인쇄하지만 이름을 바꾸지 마십시오.
  • y/source/dest/: 소스에 나타나는 패턴 공간의 문자를 대상 문자로 음역합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.