Linux에서 일괄 이름 바꾸기 파일

Linux에서 일괄 이름 바꾸기 파일

'이름 바꾸기' 명령을 사용하여 이미지 이름을 "something_full.jpg"에서 "something_500.jpg"로 재귀적으로 바꾸려면 어떻게 해야 합니까?

답변1

기본적으로 도구를 사용할 수 있습니다 rename. Debian 기반 Linux 배포판과 함께 Perl 기반 버전으로 제공되어야 하지만 쉽게다운로드 해소스에서도 마찬가지입니다(분명히 먼저 를 사용하여 실행 가능하게 만들어야 합니다 chmod +x).


다음 명령은 현재 디렉토리의 모든 JPG 파일에서 해당 _full부분을 대체합니다._500

rename 's/_full/_500/' *.jpg

현재 디렉터리부터 시작하여 이 작업을 재귀적으로 수행하려면 renamewith 를 사용하세요 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.txtmy.old.stuff.lismy.old.stuff.txt

패턴은 항상 EXTENDED_GLOB 패턴으로 처리됩니다. 대체에 의해 이름이 변경되지 않은 파일은 모두 무시됩니다. 모든 오류(대체로 인해 빈 문자열이 발생하고, 두 개의 대체로 인해 동일한 결과가 발생하고, 대상이 기존 일반 파일이고 -f가 지정되지 않음) 발생하면 전체 함수가 아무 작업도 하지 않고 중단됩니다.

EXTENDED_GLOB 패턴은 엄청나게 강력합니다.여기개념에 대한 좋은 입문서입니다.

관련 정보