파일 이름의 특정 문자열로 파일 이름을 바꾸는 방법

파일 이름의 특정 문자열로 파일 이름을 바꾸는 방법

각 파일 이름의 특정 숫자 문자열로 이름을 바꿔야 하는 .json 파일이 많이 있습니다. 다음 형식을 따릅니다.

[Artist] Title (Date) [Language][Publisher][Website.####][Pages].json

"####"은 각 파일의 이름을 바꿔야 하는 고유한 숫자 ID를 나타내며 길이는 1~4자입니다. 다음과 같아야 합니다.

####.json

이 목표를 어떻게 달성할 수 있나요?

답변1

그리고 zsh:

autoload -Uz zmv
zmv -n '*\[*.(<->)\]\[*(.json)' '$1$2'

만족스러우면 삭제 -n(테스트 실행)합니다.

able zmv autoload함수에는 두 개의 매개변수가 있습니다.

  1. zsh 확장 글로벌 모드
  2. 교체사양

패턴과 일치하는 파일을 찾습니다. 다음은 현재 디렉터리에 순서대로 포함된 숨겨지지 않은 모든 파일입니다.

  • *임의 개수의 문자(또는 바이트)
  • \[문자 그대로의 의미[
  • *임의 개수의 문자(또는 바이트)
  • .문자 그대로의 의미.
  • <->임의의 ASCII 10진수 시퀀스( <x-y>x에서 y까지의 숫자를 나타내는 ASCII 10진수 시퀀스와 일치)
  • \]\[: ][문자 그대로.
  • *임의 개수의 문자(또는 바이트)
  • .json: 문자 그대로.

교체에서는 $1첫 번째 쌍에서 일치하는 항목으로 확장하므로 및 (...)두 번째 쌍( )과 일치합니다.<->$2.json

이들이 탐욕적으로 일치하면 가장 오른쪽 쌍에서 (마지막 제외)로 끝나는 *숫자를 찾습니다. 예를 들어 에서는 s의 두 번째 쌍에 없더라도 추출합니다.[...].<digits>[a.1][a.2.3][x][y][z].json3[...]

이것이 문제인 경우 다음과 같이 변경할 수 있습니다.

zmv -n '*.(<->)\]\[[^][]#\](.json)' '$1$2'

[^][]#and를 제외한 0개 이상의 문자(또는 문자가 아닌 문자)와 일치합니다 .[]

관련 정보