![Linux에서 일괄 이름 바꾸기 파일](https://rvso.com/image/1311366/Linux%EC%97%90%EC%84%9C%20%EC%9D%BC%EA%B4%84%20%EC%9D%B4%EB%A6%84%20%EB%B0%94%EA%BE%B8%EA%B8%B0%20%ED%8C%8C%EC%9D%BC.png)
'이름 바꾸기' 명령을 사용하여 이미지 이름을 "something_full.jpg"에서 "something_500.jpg"로 재귀적으로 바꾸려면 어떻게 해야 합니까?
답변1
기본적으로 도구를 사용할 수 있습니다 rename
. Debian 기반 Linux 배포판과 함께 Perl 기반 버전으로 제공되어야 하지만 쉽게다운로드 해소스에서도 마찬가지입니다(분명히 먼저 를 사용하여 실행 가능하게 만들어야 합니다 chmod +x
).
다음 명령은 현재 디렉토리의 모든 JPG 파일에서 해당 _full
부분을 대체합니다._500
rename 's/_full/_500/' *.jpg
현재 디렉터리부터 시작하여 이 작업을 재귀적으로 수행하려면 rename
with 를 사용하세요 find
.
find . -type f -iname "*.jpg" -exec rename 's/_full/_500/' {} \;
메모:실제로 실행하기 전에 명령을 테스트할 수 있습니다. 그렇게 하려면 -n
옵션 을 추가하십시오 rename
(예: 문자열 사이 rename
) 's//'
.
답변2
당신은 조사하고 싶을 수도 있습니다zmv. zmv는 zsh 특정 기능이며 파일 autoload -U zmv
어딘가에 있어야 합니다 .zshrc
.
편집: 예를 들어 OP가 제기한 작업은 다음을 사용하여 해결할 수 있습니다.
noglob zmv '(*)_full.(*)' '$1_500.$2'
매뉴얼 페이지 에서 발췌 zshcontrib
:
zmv [ -finqQsvwW ] [ -C | -L | -M | -p program ] [ -o optstring ] srcpat dest
srcpat 패턴과 일치하는 파일을 dest가 제공하는 형식의 이름을 가진 해당 파일로 이동(일반적으로 이름 바꾸기)합니다. 여기서 srcpat에는 패턴을 둘러싸는 괄호가 포함되어 있으며 이는 차례로 dest에서 $1, $2, ...로 대체됩니다. 예를 들어,
zmv '(*).lis' '$1.txt'
, 등
foo.lis
으로 이름이 변경됩니다 .foo.txt
my.old.stuff.lis
my.old.stuff.txt
패턴은 항상 EXTENDED_GLOB 패턴으로 처리됩니다. 대체에 의해 이름이 변경되지 않은 파일은 모두 무시됩니다. 모든 오류(대체로 인해 빈 문자열이 발생하고, 두 개의 대체로 인해 동일한 결과가 발생하고, 대상이 기존 일반 파일이고 -f가 지정되지 않음) 발생하면 전체 함수가 아무 작업도 하지 않고 중단됩니다.
EXTENDED_GLOB 패턴은 엄청나게 강력합니다.여기개념에 대한 좋은 입문서입니다.