ファイル名のテキストに基づいて指定されたディレクトリにファイルを移動します。

ファイル名のテキストに基づいて指定されたディレクトリにファイルを移動します。

簡単な質問のようですが、最後にスクリプトを書いてから長い時間が経ちました。

サーバーから多数のイメージファイルをダウンロードしてから、イメージファイル名に基づいてクリーンアップする必要があります。この場合、イメージファイルはページなので、章のディレクトリに移動する必要があります。

画像ファイル名の例は「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

関連情報