![根据文件名中的文本将文件移动到指定目录](https://linux22.com/image/179393/%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E5%90%8D%E4%B8%AD%E7%9A%84%E6%96%87%E6%9C%AC%E5%B0%86%E6%96%87%E4%BB%B6%E7%A7%BB%E5%8A%A8%E5%88%B0%E6%8C%87%E5%AE%9A%E7%9B%AE%E5%BD%95.png)
这似乎是一个简单的问题,但自从我上次编写脚本以来已经很长时间了,而且我是 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