확장자로 파일을 찾고 검색 패턴 앞뒤의 문자 바꾸기

확장자로 파일을 찾고 검색 패턴 앞뒤의 문자 바꾸기

확장자로 파일을 찾고 검색 패턴 앞의 임의 문자를 지정된 텍스트(대체)로 바꾸고, 이 패턴 뒤의 숫자를 증분 카운터로 변환하고 다른 폴더로 이동해야 합니다. 예는 다음과 같습니다:

확장자 .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하여 실제로 작업을 수행하세요.

관련 정보