파일 이름의 숫자를 늘려 파일 이름 바꾸기

파일 이름의 숫자를 늘려 파일 이름 바꾸기

다음과 같이 번호가 매겨진 이미지 파일이 포함된 디렉토리가 있습니다.

01.png
02.png
03.png
03.svg
04.png
05.png
06.jpg
07.png
08.png
09.png
09.svg
10.png

경우에 따라 파일에 다양한 형식의 여러 버전이 있을 수 있지만(예: 위의 파일 버전과 파일 버전 png) svg번호가 연속되어 있습니다. 일반적으로 디렉터리당 이러한 파일은 40-80개입니다. 숫자는 이러한 이미지가 원고(Word 문서이지만 중요하지 않음)에 나타나는 순서에 해당합니다. 이미지의 순서를 결정하는 다른 방법은 없습니다.0309

원고에 새 이미지를 추가하는 경우 해당 이미지의 사본을 올바른 번호로 이 디렉토리에 배치해야 합니다. 따라서 새 이미지가 원고의 다섯 번째 이미지인 경우 공간을 확보하기 위해 디렉터리의 파일 이름을 다음과 같이 바꿔야 합니다.

01.png
02.png
03.png
03.svg
04.png
06.png
07.jpg
08.png
09.png
10.png
10.svg
11.png

명령줄이나 스크립트 또는 매크로에서 특정 번호부터 시작하여 모든 파일의 번호를 다시 매기는 가장 간단한 방법은 무엇입니까? bash를 사용하여 표준 Fedora Linux를 설치했습니다.

답변1

나는 그것이 다음을 수행해야한다고 생각합니다 :

#!/bin/bash

NEWFILE=$1

for file in `ls|sort -g -r`
do
    filename=$(basename "$file")
    extension=${filename##*.}
    filename=${filename%.*}

    if [ $filename -ge $NEWFILE ]
    then
        mv "$file" "$(($filename + 1))".$extension
    fi
done

스크립트는 하나의 매개변수, 즉 새 이미지의 번호를 사용합니다.

추신. 이미지 외부의 다른 디렉터리에 스크립트를 배치합니다. 이미지 디렉터리에는 설명하는 대로 이름이 지정된 이미지만 있어야 합니다.

답변2

이것은 zsh에서 더 쉽습니다.

  • 이것On 글로벌 예선내림차순으로 일치 항목을 정렬합니다( n파일 이름 앞에 0이 고르지 않게 너비가 있는 경우 숫자 순서를 사용합니다).
  • 이것(l:WIDTH::FILLER:) 매개변수 확장 플래그모든 숫자를 동일한 너비(더 큰 숫자의 너비)로 채웁니다.
break=$1   # the position at which you want to insert a file
setopt extended_glob
width=
for x in [0-9]*(nOn); do
  n=${x%%[^0-9]*}
  if ((n < break)); then break; fi
  ((++n))
  [[ -n $width ]] || width=${#n}
  mv $x ${(l:$width::0:)n}${x##${x%%[^0-9]*}}
done

Bash에서 다음 스크립트는 파일이 고정 너비로 ​​채워지고(그렇지 않으면 스크립트가 올바른 파일 이름을 바꾸지 않음) 고정 너비(지정해야 함)로 채워지는 것으로 가정합니다.

break=$1      # the position at which you want to insert a file
width=9999    # the number of digits to pad numbers to
files=([0-9]*)
for ((i=#((${#files}-1)); i>=0; --i)); do
  n=${x%%[^0-9]*}
  x=${files[$i]}
  if ((n < break)); then continue; fi
  n=$((n + 1 + width + 1)); n=${n#1}
  mv -- "${files[$i]}" "$n${x##${x%%[^0-9]*}}"
done

답변3

최근에는 이 문제에 별로 관심이 없는 것 같은데, 혹시 우연히 발견한 사람이 있다면 세 가지 질문을 던져 보세요.

  • 하나는 의미론적 기준에 따라 이름을 바꿀 파일을 선택하는 방법입니다(범위는 어휘가 아니며 와일드카드나 정규 표현식으로도 지정할 수 없습니다. 오토마타 이론에서는 이를 NFA보다 더 복잡하다고 간주합니다).

  • 두 번째는 이름의 일부를 수정하여 이름을 바꾸는 방법이다.

  • 세 번째는 이름 충돌을 피하는 방법입니다.

Bash 및 기타 여러 언어의 스크립트는 이러한 특정 변환을 수행할 수 있지만 대부분의 사람들은 여러 파일의 이름을 바꾸고 싶을 때마다 프로그램을 작성할 필요가 없습니다.

내(무료 및 오픈 소스)를 사용하면 rene.py원하는 것을 할 수 있지만 이름 충돌 문제를 방지하려면 두 번의 호출이 필요합니다.

  1. 첫 번째
    rene ?.*/#7-80  %?.* B
    
    %기존 이름을 피하기 위해 접두사를 추가하여 범위의 모든 이름을 늘립니다 .
  2. 그 다음에
    rene %* *
    
    해당 접두사가 있는 파일에서 접두사를 제거합니다.

나는 이것을 설명했다https://sourceforge.net/p/rene-file-renamer/discussion/examples/thread/f0fe8aa63c/

답변4

이 정확한 질문은이 기사. 두 번째 MV 단계를 추가하여 SVG 및 PNG 형식을 지원하도록 수정해야 합니다.

관련 정보