비슷한 이름의 디렉터리 집합의 이름을 바꾸고 다른 위치로 복사/이동

비슷한 이름의 디렉터리 집합의 이름을 바꾸고 다른 위치로 복사/이동

서로 다른 위치에 비슷한 이름을 가진 디렉터리 집합의 경우

/foldX/dirA하위 디렉토리가 있습니다aa1 aa2 aa3 aa4 aa5

/foldZ/dirA하위 디렉토리가 있습니다aa1 aa2 aa3

/foldY/dirA하위 디렉토리가 있습니다aa1 aa2 aa3

aa*디렉토리를 다른 폴더로 복사하거나 이동하는 효율적인 방법은 /foldNew/dirA무엇 입니까 aa1, aa2, aa3, aa4, aa5, aa6, aa7, aa8, aa9, aa10?

aa1누구 에게 aa4누구로부터foldX

aa5누구 에게 aa7누구로부터foldY

aa8누구 에게 aa10누구로부터foldZ

답변1

다음 스크립트는 원하는 작업을 수행합니다.

#!/bin/bash
counter=0
mkdir foldNew
for i in fold?/dirA/aa*; do
    counter=$((counter + 1))
    mv $i foldNew/aa$counter
done

이동된 폴더 수를 추적하고 Bash의 와일드카드 시스템을 사용하여 이동하려는 모든 폴더를 반복합니다.

설명하신 설정을 사용하여 테스트했는데 원하는 대로 작동합니다. 유일한 예외는 dirA에 4개가 아닌 5개의 하위 디렉터리가 있으므로 aa1에서 aa11로 이동하는 것입니다.

이 스크립트는 aa20을 aa3 앞으로 이동합니다. 하위 디렉터리의 순서가 정말로 중요한 경우 다음 코드를 시도해 볼 수 있습니다.

#!/bin/bash
counter=0
mkdir foldNew
for i in $(echo fold?/dirA/aa* | sort -V); do
    counter=$((counter + 1))
    mv $i foldNew/aa$counter
done

다만, 파일명에 공백이나 개행 문자를 잘 처리하지 못하는 것 같으니 사용 시 주의하시기 바랍니다.

관련 정보