zmv 명령은 패턴을 일치시킨 후 파일 이름을 바꿉니다.

zmv 명령은 패턴을 일치시킨 후 파일 이름을 바꿉니다.

해결책을 찾으려고 노력 중이에요이것을(를) 사용하여 문제가 발생했습니다 zmv. 을(를) 사용하여 정확한 해결책을 찾을 수 없습니다 zmv. 이것이 내가 지금까지 생각할 수 있는 것입니다.

~에서여기, 다음 명령을 사용하여 등의 모든 파일 이름을 1.jpg로 바꿀 수 있습니다 .2.jpg34.jpg001.jpg002.jpg034.jpg

zmv '(<1->).jpg' '${(l:3::0:)1}.jpg'

zmv이제 파일 이름을 바꿀 수 있도록 시작 부분에 일부 패턴이 있도록 수정해야 합니다 . 그러나 나는 이것을 할 수 없습니다. 내가 찾을 수있는 가장 가까운 것은 이것입니다해결책.

c=1 base='0-' zmv '*.jpg' '${base}${(l:3::0:)$((c++))}.jpg'

그러나 위 방법의 문제점은 내 파일이 이면 0-1.jpg0-44.jpg명령이 해당 파일을 0-001.jpgand 0-002.jpg대신 0-001.jpgand 로 대체한다는 것입니다 0-044.jpg.

zmv원하는 이름 바꾸기를 수행하려면 명령을 어떻게 수정해야 합니까 ?

답변1

당신은 그것을 사용할 수 있습니다-l 확장 플래그:

l:expr::string1::string2:

생성된 단어를 왼쪽에 채웁니다. 필요한 경우 각 단어가 잘려 expr 문자 전체 필드에 배치됩니다.

:string1: 및 :string2: 매개변수는 선택 사항입니다. 둘 다 제공할 수 없거나, 첫 번째 매개변수를 제공하거나, 둘 다 제공할 수 있습니다. 세 매개변수 각각은 동일한 구분 기호 쌍을 사용해야 합니다. 왼쪽의 공백은 string1(필요한 만큼 자주 연결됨) 또는 공백(string1이 제공되지 않은 경우)으로 채워집니다. string1과 string2가 모두 제공되면 string1을 사용하여 필요에 따라 잘린 나머지 패딩을 생성하기 전에 string2가 각 단어의 왼쪽에 직접 한 번 삽입됩니다.

MULTIBYTE 옵션이 적용되는 경우 m 플래그도 제공될 수 있습니다. 이 경우 너비는 패딩을 계산하는 데 사용됩니다. 그렇지 않으면 단일 멀티바이트 문자가 하나의 너비 단위를 차지하는 것으로 간주됩니다.

MULTIBYTE 옵션이 유효하지 않은 경우 문자열의 각 바이트는 하나의 너비 단위를 차지하는 것으로 간주됩니다.

제어 문자는 항상 하나의 단위로 간주됩니다. 이를 통해 메커니즘을 사용하여 제어 문자의 반복을 생성할 수 있습니다.

노력하다:

zmv '([0-9])-([0-9]##).(jpg)' '$1-${(l:3::0:)2}.$3'

답변2

0으로 채워지 지만 3자보다 긴 ${(l:3::0:)var}문자는 잘립니다 ( 로 변경됨 ).var1234234

typeset -Z3또 다른 옵션은 à la를 사용하는 것입니다 ksh.

typeset -Z3 z3
zmv '([0-9]-)(<->)(.jpg)' '$1${${z3::=$2}+}$z3$3'

우리는 ${${z3::=$2}+}위의 방법을 사용하여 쌍 할당을 트리거합니다 z3. 다음은 0 padding으로 $z3확장됩니다 .z3

관련 정보