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


-1

다음과 같이 이름이 지정된 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 ++로 무언가를해야하지만 그것을 통합하는 방법을 잘 모르겠습니다.

답변:


0

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

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

모든 기능이 작동하는 이유를 조사하기 위해 분석해 주셔서 감사합니다.
matt101
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.