디렉토리의 모든 파일 이름 을 소문자 | 대문자 로 바꾸는 방법이 있습니까?
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/
: 소스에 나타나는 패턴 공간의 문자를 대상 문자로 음역합니다.