Linux Bash 스크립트 - 순차 파일을 순차 폴더로 정렬

Linux Bash 스크립트 - 순차 파일을 순차 폴더로 정렬

다음과 같은 이름의 1000개 파일 시퀀스가 ​​있습니다.

file01-01-01, file01-01-02 etc.
file01-02-01, file01-02-02 etc.
file02-01-01, file02-02-02 etc.

파일을 다음과 같은 이름의 폴더로 정렬하고 싶습니다.

dir01-01 (containing files01-01*)
dir01-02 (containing files01-01*)
dir02-01 (containing files02-01*)

다음과 같은 명령을 통해 이 작업을 수행하는 데 걸리는 시간을 줄일 수 있다는 것을 알고 있습니다.

mkdir dir01-01; for f in file01-01*; mv "$f" dir01-01; done

그러나 위의 방법은 정렬 시간을 약간만 줄여줄 뿐입니다. 전체 정렬 작업을 어떻게 자동화할 수 있습니까?

let N ++를 사용하여 뭔가를 해야 한다는 것을 알고 있지만 이를 통합하는 방법을 잘 모르겠습니다.

답변1

이것은 작동합니다. 먼저 다음과 같은 테스트 파일을 만들었습니다.

touch file01-01-01 file01-01-02 file01-02-01 file01-02-02 file02-01-01 file02-02-02

다음을 사용하여 존재하는지 확인했으며 ls -1출력은 다음과 같습니다.

file01-01-01
file01-01-02
file01-02-01
file01-02-02
file02-01-01
file02-02-02

그런 다음 해당 파일이 포함된 디렉터리 내에서 다음 Bash 스크립트를 실행했습니다.

find . -type f |\
  while read FULL_FILE_PATH
  do
    FIRST_TWO_DIGITS=$(echo "${FULL_FILE_PATH}" | grep -Eo '[[:digit:]]{2}-[[:digit:]]{2}');
    if [ ! -z "$FIRST_TWO_DIGITS" -a "$FIRST_TWO_DIGITS" != " " ]; then
      DIR=dir"${FIRST_TWO_DIGITS}";
      mkdir -p "${DIR}";
      mv "${FULL_FILE_PATH}" "${DIR}";
    fi
  done

완료한 후 ls -1다음과 같이 디렉토리를 확인했는데 반환된 출력은 다음과 같습니다.

dir01-01
dir01-02
dir02-01
dir02-02

따라서 디렉토리는 있지만 파일이 복사되었는지 확인하기 위해 다음과 같이 해당 ls명령을 실행했습니다 . 결과는 다음과 같습니다.*ls -1 *

dir01-01:
file01-01-01
file01-01-02

dir01-02:
file01-02-01
file01-02-02

dir02-01:
file02-01-01

dir02-02:
file02-02-02

관련 정보