폴더 순서에 폴더를 추가하고 다른 폴더의 이름을 바꿉니다.

폴더 순서에 폴더를 추가하고 다른 폴더의 이름을 바꿉니다.

x개의 폴더가 있습니다

folder1
folder2
folder3
......
folder100

내가 하고 싶은 것은;

add folder2
reorder

그래서 지금:

folder1
folder2
folder3
......
folder101

이제 폴더 2의 폴더는 폴더 3이 됩니다.

예: 폴더 2 -> 폴더 3, 폴더 3 -> 폴더 4, 폴더 4 -> 폴더 5

폴더 1은 변경되지 않은 상태로 유지됩니다.

더 정확하게는 이것을 자동화하고 싶습니다.

$ mkdir 1 2 3 4 5
$ ls
1 2 3 4 5
$ mkdir 2_1
$ ls
1 2 2_1 3 4 5
$ mv 5 6
$ ls
1 2 2_1 3 4 6
$ mv 4 5
$ mv 3 4
$ mv 2 3
$ mv 2_1 2
$ ls
1 2 3 4 5 6
$

Bash에서 이 작업을 어떻게 수행합니까?

답변1

for..중괄호 표현식이 있는 절을 사용하여 다음과 같은 인라인 산술뿐만 아니라 열거도 수행 할 수 있습니다 .

for f in {100..2} ; do mv $f $((f+1)) ; done

이렇게 하면 모든 폴더를 100에서 2로 한 단계로 "위로 이동"할 수 있습니다.

보다 일반적으로는 폴더 이름 패턴 X_1에서 삽입 지점 X를 찾고 "구멍 펀치" 앞에 가장 높은 번호의 폴더 이름을 찾는 스크립트를 사용할 수 있습니다. 이 같은:

#!/bin/bash
X=*_1
F=( $(ls * | sort -nr) )
for f in {$F..${X%_1}} ; do mv $f $((f+1)) ; done
mv $X ${X%_1}

이는 $F모든 폴더 이름의 배열이며, 가장 큰 것부터 가장 작은 것까지 숫자로 정렬되어 있으므로 $F그 자체가 가장 큰 숫자입니다. 또한 형식은 ${X%_1}" $X끝을 제거 _1"를 의미합니다. 형식은 $((f+1))"값에 1을 더함 f"을 의미합니다.

스크립트는 가장 높은 숫자 이상의 "삽입"을 처리하지 않습니다.

답변2

그리고 zsh:

autoload zmv # best in ~/.zshrc
zmv 'folder(<2->)(#q/nOn)' 'folder$(($1 + 1))' &&
  mkdir folder2

또는 folder<n>_1폴더 존재에 따라 자동으로 이름을 바꿉니다.

setopt extendedglob
for dir ([-._[:alpha:]]##<->_1(N/nOn)) {
  [[ $dir = (#b)(*)(<->)_1 ]]
  zmv "($match[1])(<$match[2]->)(#q/nOn)" '$1$(($2 + 1))' &&
    mv "$dir" "${dir%_1}" || break
}

예:

앞으로:

$ ls
bar1/  bar2/  bar2_1/  bar3/  foo1/  foo1_1/  foo1_3/  foo2/  foo3/  foo4/

뒤쪽에:

$ ls
bar1/  bar2/  bar3/  bar4/  foo1/  foo2/  foo3/  foo4/  foo5/  foo6/  

답변3

mkdir에 정규식을 사용하십시오.

mkdir folder{1..100}

그런 다음 출력을 확인하십시오!

ls -l 

folder1
folder2
folder3
..
folder100

답변4

제가 해결한 방법은 이렇습니다

#!/bin/bash
for f in {100..2} ; do mv $f $((f+1)); done
x="?_1"
y=$(echo $x | cut -b 1-1)
mv $x $y

이는 매우 수동적이지만 초기 문제를 훨씬 빠르게 해결할 수 있습니다.

관련 정보