감소하는 시퀀스 번호로 여러 디렉터리의 이름을 바꾸시겠습니까?

감소하는 시퀀스 번호로 여러 디렉터리의 이름을 바꾸시겠습니까?

형식의 이름을 가진 많은 하위 디렉터리가 포함된 디렉터리가 있습니다 dir.##. 접두사는 항상 동일하며 접미사는 1~3자리의 엄격하게 증가하는 순서입니다. 그래서 다음과 같습니다.

dir.0
dir.1
dir.2
dir.3
...
dir.9
dir.10
dir.11
...
dir.298
dir.299
dir.300

먼저, 처음 몇 개의 디렉토리를 삭제하고 싶습니다. 이것은 사소한 일입니다.

dir.7그런 다음 모든 후속 디렉터리의 이름을 바꾸어 to dir.0, dir.8to dir.1, dir.10to dir.3등과 같은 숫자 접미사를 이동하려고 합니다. 즉, 각 접미사(숫자로 처리됨)를 주어진 상수 오프셋만큼 이동합니다.

이와 같은 이름 바꾸기 작업을 수행하는 방법각 디렉터리의 이름을 개별적으로 수동으로 바꿀 필요가 없나요?

별도의 도구를 사용하여 이를 수행할 수 있지만 "이국적인" 소프트웨어 없이도 bash에서 모든 작업을 수행할 수 있다면 좋을 것입니다.

답변1

이 감소는 상당히 간단한 방법으로 수행할 수 있습니다. 처음부터 목록을 생성합니다. 모든 경우를 처리하여 "제품화"하는 것은 쉽지 않지만 최대 비트 수와 같은 항목을 하드코딩하고 명명된 다른 항목이 없다고 가정하는 경우 dir.*타이핑이 적은 bash 구문을 사용하십시오.

i=0
for x in dir.{?,??,???}; do
  mv "$x" "${x%.*}.$i"
  ((++i))
done

이 정보는 dir.{?,??,???}이전이 아니라 이전에 얻어야 합니다 dir.*.dir.9dir.10

<->zsh에서는 숫자 순서로 확장하고 (n)숫자별로 정렬( dir.9before )을 사용하여 dir.10무료로 더욱 강력하게 만들 수 있습니다.

i=0
for x in dir.<->(n); do
  mv $x ${x%.*}.$i
  ((++i))
done

답변2

또 다른 방법:

n=7   # number to delete
max=$(printf "%s\n" dir.* | grep -o '[[:digit:]]*' | sort -n | tail -1)
for (( i=0; i<n; i++)); do rm -r "dir.$i"; done
for (( i=n; i<=max; i++ )); do mv "dir.$i" "dir.$((i-n))"; done

답변3

그래픽 도구 KRename을 사용할 수도 있습니다.

다음과 같이 진행하세요:

  1. 문서를 선택하세요
  2. 파일 이름을 바꾸는 옵션을 선택하십시오
  3. JavaScript 플러그인 열기\
  4. 필드 접두어를 비어 있음, 접미어: 비어 있음, 파일 이름: 원래 이름 사용, 확장자: 기타 확장자: 감소해야 하는 값은 [js;krename_extension-OFFSET]어디에 있습니까?OFFSET

관련 정보