用于创建文件夹结构的 Bash 脚本

用于创建文件夹结构的 Bash 脚本

我正在尝试编写一个 Bash 脚本来自动执行一项重复性任务,即创建一个文件夹结构,其中一些文件夹应该被编号(更具体地说,这是为了将我从 DVD 转换的一些电视剧存档在一个 Kodi 媒体播放器容易理解的文件夹结构中)

第一次尝试是这样的:

echo "Insert the title of the series"
read title

mkdir $title
mkdir $title/extrafanart
mkdir $title/themes
mkdir $title/videoextras

for num in {1..3}
do
  mkdir $title/"Season $num"
done

这正确地创建了以下结构,例如

Star Trek
Star Trek\extrafanart
Star Trek\Season 1
Star Trek\Season 2
Star Trek\Season 3
Star Trek\themes
Star Trek\videoextras

这正是我需要的。但是,正如您可能看到的,这个脚本有一个主要缺点:季节文件夹的总数是固定的,而不是每次运行脚本时动态选择。所以我尝试对其进行如下修改

echo "Insert the title of the series"
read title
echo "Insert the number of seasons"
read seasons

mkdir $title
mkdir $title/extrafanart
mkdir $title/themes
mkdir $title/videoextras

for num in {1..$seasons}
do
  mkdir $title/"Season $num"
done

这次,结果并不完全是我所期望的,这就是我得到的

Star Trek
Star Trek\extrafanart
Star Trek\Season {1..3}
Star Trek\themes
Star Trek\videoextras

这不是我需要的。

我猜问题出在循环的第一行for,其中括号扩展被 shell 读取为字符串而不是要计算的表达式。我说得对吗?

什么地方出了问题?我该如何修正这个脚本?

答案1

使用循环:

num=1
while [ $num -le $seasons ]; do
  mkdir $title/"Season $num"
  num=$[ $num + 1 ]
done

解释

我们使用 [ 测试运算符和 $[ 求值运算符(它们看起来很相似,但完全不同)。[ $num -le $seasons ]测试 $num 是否大号qual than $seasons;$[ $num + 1 ]将 $num 的数值加一并将其分配回 $num。

有关测试运算符的信息,请help test在您的 bash shell 中输入。求值运算符在 bash 手册中有说明(man bash请注意,它很长)。您还可以使用它来减法、乘法、除法等。

相关内容