확장자로 파일을 찾고 검색 패턴 앞의 임의 문자를 지정된 텍스트(대체)로 바꾸고, 이 패턴 뒤의 숫자를 증분 카운터로 변환하고 다른 폴더로 이동해야 합니다. 예는 다음과 같습니다:
확장자 .EXT로 파일 찾기
/opt/files/QvmBIsB3_PATTERN_77580.EXT
/opt/files/8iV8QhFwQos_PATTERN_77580.EXT
/opt/files/lgI6JUEh55za488_PATTERN_77580.EXT
이를 변경하고 다른 폴더로 바꾸십시오.
/opt/replaced/REPLACED_PATTERN_1.EXT
/opt/replaced/REPLACED_PATTERN_2.EXT
/opt/replaced/REPLACED_PATTERN_3.EXT
답변1
zsh를 사용하면 감사합니다.즈마브:
autoload -zU zmv
n=1
zmv -n '/opt/files/*_(PATTERN)_*(.EXT)' '/opt/replaced/REPLACED_PATTERN_$((n++))$2'
설명하다:
- 첫 번째 매개변수
zmv
는 이름을 바꿀 파일을 식별하는 쉘 패턴입니다. - 두 번째 매개변수는 대체 텍스트입니다.
- 패턴에서 괄호 안의 그룹과 일치하는 부분을 사용하려면 대체 텍스트에
$1
, 등을 사용할 수 있습니다.$2
$((n++))
$n
현재 값을 사용하여 증가됩니다.- 만족스러우면 삭제
-n
하여 실제로 작업을 수행하세요.
또는 다음을 사용할 수 있습니다.펄 기반prename
( rename
데비안 패키지). zmv와 비교하면 데비안에 기본적으로 설치된다는 장점이 있지만, 이 작업을 포함한 많은 작업에 대해 더 비밀스럽다는 단점이 있습니다.
prename -n 'BEGIN {our $n = 1} our $n; s!.*_(PATTERN)_[0-9]+(\..*)$!/opt/replaced/REPLACED_PATTERN_$n$2! and ++$n' /opt/files/*_PATTERN_*.EXT
설명하다:
- 첫 번째 매개변수
prename
는 각 파일 이름에 대해 실행되는 Perl 표현식입니다. 암시적 변수의 이전 값$_
은 현재 파일 이름이고, 표현식이 평가된 후 파일 이름이 새 값으로 변경됩니다. - 이
BEGIN {…}
블록은$n
파일 이름에 대해 루프를 실행하기 전에 초기화됩니다. BEGIN 블록 및 주요 표현식에서 사용할 수 있도록 전역 변수로our $n
선언합니다 .$n
s!…!…!
정규식 대체를 수행합니다.- 정규식은 파일 전체에서 원하는 패턴과 일치합니다(왜냐하면
.*
다음으로 시작하고 끝나기 때문$
입니다. 단순화를 위해 파일 이름에 개행 문자가 포함되어 있지 않다고 가정합니다). 일치 항목이PATTERN
저장될 때마다$1
확장자는$2
(괄호로 묶인 두 그룹)에 저장됩니다. - 바꾸기는 다른 디렉터리에 새 파일 이름을 생성합니다.
and ++$n
패턴이 일치하면 카운터를 증가시킵니다.- 만족스러우면 삭제
-n
하여 실제로 작업을 수행하세요.