임의의 파일 이름에서 연속된 파일 이름으로 많은 파일 이름을 바꾸는 방법은 무엇입니까? [복사]

임의의 파일 이름에서 연속된 파일 이름으로 많은 파일 이름을 바꾸는 방법은 무엇입니까? [복사]

8,000개의 이미지가 있는 디렉토리가 있습니다. 이러한 파일은 다양한 파일 이름을 가지며 유형은 jpeg 또는 png입니다.

이름을 다음과 같이 바꾸고 싶습니다.

pic00001.png
pic00002.jpg

한 번은 png를, 다른 한 번은 jpeg를 실행하여 두 개의 약간 겹치는 세트(pic00001.png, pic00002.png 및 pic00001.jpeg, pic00002.jpeg)로 끝나더라도 상관없습니다.

SE의 현재 문제는 일괄 이름 바꾸기(기존 파일 이름을 사용하고 정적 정보를 추가하거나 제거하는 경우)와 관련이 있습니다. 나는 그렇게하지 않을 것입니다. 전체 파일 이름을 증가하는 숫자로 바꿉니다.

답변1

예를 들어, 쉘 루프를 사용하여 이 작업을 수행할 수 있습니다.

for f in *.jpeg *.png
do  printf "mv '%s' pic%05d.%s \n" "$f" $((++c)) "${f##*.}"
done | sh

프로그램은 시퀀스 번호를 한 번 실행하고 원래 파일 확장자를 유지하여 시퀀스를 생성합니다.

참고: 명령 또는 명령 시퀀스를 생성하고 결과를 셸에 전달하는 기술은 표준 인코딩 패턴입니다. 최종 파이프라인 없이 먼저 프로그램을 실행하여 sh생성된 명령이 적합한지 확인하고 모든 것이 괜찮아 보이면 최종 파이프라인을 연결할 수 있습니다. (일반적인 임시 추가와 달리 echo파이프-쉘 방법은마디 없는산출. )

그러나 (Giles가 지적했듯이) 주어진 경우에 작은따옴표가 포함된 파일 이름은 해당 파일 이름에 대해 잘못된 결과를 생성한다는 점에 유의하십시오. 사전 확인 도구가 필요하지 않은 경우 다음과 같이 명령을 직접 실행할 수 있습니다.

for f in *.jpeg *.png
do
  ((++c))
  new_f=$( printf "pic%05d.%s" $c "${f##*.}" )
  mv "${f}" "${new_f}"
done

(편집증의 경우: 물론 이러한 솔루션도 예상대로 작동하지 않는 경우가 있습니다. 예를 들어 일부 기존 파일이 이미 대상 파일 이름 형식을 준수하는 경우 파일을 생성/이동합니다. 개별 파일의 손상을 방지하기 위한 새 임시 디렉토리).

관련 정보