2017-12-09 14 views
0

파일 이름 형식의 이미지 파일 시리즈는 다음과 같습니다.중복시 이름 변경 및 증가

9407-C-9406-B-038.jpg 
9407-C-9406-B-118.jpg 
9422-AC-012.jpg 
9422-AC-112.jpg 
9422-BD-043.jpg 
9422-BD-Still-001.jpg 
9405_M.jpg 
9792A.jpg 
9792B.jpg 

제 목적에 맞는 부분은 처음 4 자이고 나머지는 부적합합니다.

내가 선두 4 문자 문자열이 유지되도록 파일의 이름을 변경하고 싶습니다 확장이 유지되지만 중복이 발견 될 때 나머지가 증가 : 예 :

9422-AC-012.jpg becomes 942200.jpg 
9422-AC-112.jpg becomes 942201.jpg 
9422-BD-043.jpg becomes 942202.jpg 
9422-BD-Still-001.jpg becomes 942203.jpg 
9405_M.jpg becomes 940500.jpg 
9792A.jpg becomes 979200.jpg 
9792B.jpg becomes 979201.jpg 

사용 ' rename '처음 4 개의 문자 다음에 문자열을 제거 할 수 있으며 파일 이름의 증분 부분이 수천 개로 끝나는 결과를 얻을 수 있습니다.

rename -n -N 0001 's/(?<=.{4}).*/$N.jpg/' *.jpg

는 사람이 파일을 처음 4 개 문자 후 파일 이름을 제거 이름을 변경하는 방법을 제안하고, 중복이 발생하는 경우에만 증가 할 수 있나요?

+0

[다음 중 하나를 수행하십시오. 내 질문에 대답?] (http://stackoverflow.com/help/someone-answers) – Cyrus

답변

0

awk에 구조!

$ while read f t; 
    do 
    echo "mv $f $t"; 
    done < <(awk -F\. '{k=substr($0,1,4); printf "%s\t%s%04d.%s\n", $0,k,a[k]++,$NF}' file) 

mv 9407-C-9406-B-038.jpg 94070000.jpg 
mv 9407-C-9406-B-118.jpg 94070001.jpg 
mv 9422-AC-012.jpg 94220000.jpg 
mv 9422-AC-112.jpg 94220001.jpg 
mv 9422-BD-043.jpg 94220002.jpg 
mv 9422-BD-Still-001.jpg 94220003.jpg 
mv 9405_M.jpg 94050000.jpg 
mv 9792A.jpg 97920000.jpg 
mv 9792B.jpg 97920001.jpg 

실제 이름 변경에 대한 echo를 제거 파일에 나열된 파일 이름으로

는 최소 4 개 문자 긴 파일 이름에 공백을지지 않습니다 및 확장자를 갖습니다.

이 예제에서는 두 자리 숫자 카운터를 보여줍니다. 카운터가 수천 단위라고 언급 했으므로 여기에 인쇄 형식 %04d으로 제어됩니다. 100을 초과하여 예상하지 않으면 4가 2로 변경됩니다. 고유 한 파일이지만 할당 된 자릿수에서 확장 될 수 있습니다 (예 : 00,01, .. 99가 생성되고 다음은 100이됩니다).