파일 이름의 텍스트를 기반으로 지정된 디렉터리로 파일을 이동합니다.

파일 이름의 텍스트를 기반으로 지정된 디렉터리로 파일을 이동합니다.

간단한 질문인 것 같지만 마지막으로 스크립트를 작성한지 오랜 시간이 흘렀고, bash 스크립트를 처음 접하는 초보자라 죄송합니다.

서버에서 많은 수의 이미지 파일을 다운로드한 다음 이미지 파일 이름을 기준으로 정리해야 합니다. 이 경우 이미지 파일은 페이지이므로 챕터인 디렉터리로 이동해야 합니다.

이미지 파일 이름의 예는 "0080-002.png"와 같습니다.

0080 =
장 002= 페이지 번호

따라서 파일이 "0080-***.png"이면 "chapter-80" 디렉터리로 이동합니다.

이것이 내가 지금까지 가지고 있는 것입니다.

#!/bin/bash

mkdir BOOK
cd BOOK
mkdir chapter-{1..80}

wget SOME_URL/00{01..80}-0{1..90}.png

for file=$(ls | grep *.png | cut -c1-4) in ~/BOOK/ do

증분 변수를 사용하려고 생각했지만
변수가 "$file"이므로 어떻게 해야 할지 잘 모르겠습니다.

- 경험이 없어서 죄송합니다. 제안 사항이 있으면 미리 감사드립니다.

답변1

#!/bin/bash

url="SOME_URL"
dir="BOOK"

[ "$dir" ] && mkdir -p "$dir" || dir=.

# avoid cd in scripts
#cd BOOK
#mkdir chapter-{1..80}

# sure? this could take ages
wget "$url"/00{01..80}-0{1..90}.png -P "$dir"

# avoid parsing ls
for file in "$dir"/[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9].png
  do
    [ -f "$file" ] || continue
    subdir="${file%/*}"
    fname="${file##*/}"
    chapt="$(printf 'chapter-%02.0f' "${fname%%-*}")"

    # only existing chapter on need
    mkdir -p "$subdir/$chapt"

    mv "$file" "$subdir/$chapt"
done

관련 정보