
다음과 같은 이름의 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