특정 파일 이름을 추출하여 해당 이름의 폴더에 넣습니다.

특정 파일 이름을 추출하여 해당 이름의 폴더에 넣습니다.

저는 Bash, Ubuntu 16.04를 처음 사용합니다.

다음과 같은 파일이 많이 있습니다.

aaaa1111
aaaa1112
aaaa1113
aaaa1114 ...

aaab1111
aaab1112
aaab1113
aaab1114 ...

aaac1111 
aaac1112 ... (and so on ...)

어쨌든 패턴은 4자리 + 숫자 입니다. 내가 해야 할 일은 이 4개의 문자를 기반으로 디렉터리를 만들고 해당 디렉터리에 해당 파일을 넣는 것뿐입니다.

예를 들어,

aaaa1111
aaaa1112
aaaa1113
aaaa1114 ...

aaaa 디렉터리에 저장됩니다.

aaab1111
aaab1112
aaab1113
aaab1114 ...

aaab 디렉터리에 저장됩니다.

"sed", "mv" 등을 시도했지만 잘 작동하지 않습니다.

답변1

for file in [a-z][a-z][a-z][a-z][0-9][0-9][0-9][0-9]; do
    mkdir -p "${file:0:4}" && mv "$file" "${file:0:4}"
done

-loop는 for4개의 문자와 4자리 숫자를 사용하여 현재 디렉터리의 파일 이름을 반복하며 file각 단계에서 변수에 파일 이름을 할당합니다.

mkdir대상 디렉터리를 만듭니다. 플래그를 사용하면 -p디렉토리가 이미 존재하고 ${file:0:4}현재 파일 이름의 처음 4자를 유지하는 경우 오류 메시지가 나타나는 것을 방지할 수 있습니다. 명령이 성공하면 파일이 이 디렉터리로 이동됩니다.

답변2

나는 이것이 가능하다고 생각한다:

cd your_source_dir || exit

for file in *; do
  if [[ $(echo "$file" | grep -Pw "[a-z]{4}[0-9]{4}") ]]; then
    dir="${file:0:4}"
    [[ -d "$dir" ]] || mkdir "$dir"
    [[ -f "$file"]] && mv "$file" "$dir/"
  fi
done

관련 정보