根据文件名中的文本将文件移动到指定目录

根据文件名中的文本将文件移动到指定目录

这似乎是一个简单的问题,但自从我上次编写脚本以来已经很长时间了,而且我是 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

相关内容