我编写了少量bash脚本。主要是根据我的需要修改脚本。在这个问题上我被难住了。我需要一个脚本,将读取文件夹内的子文件夹名称,并使基于该子文件夹名称的文件夹编号列表。
的例子:我创建了一个名为"图片"的文件夹。然后在里面新建一个名为picture-set的子文件夹我想要一个脚本来查看现有的子文件夹名称(图片集),并使10多个文件夹与顺序数字追加到文件夹名称的末尾。例:文件夹为:图片子文件夹为:picture-set
要创建:"picture-set-01"picture-set-02"picture-set-03"以此类推,直到10。或脚本中指定的数字。
文件夹结构应该是这样的:
/home/图片/picture-set
/home/图片/picture-set-01
/home/图片/picture-set-02
/home/图片/picture-set-03…等等
我无法告诉脚本如何找到基本文件夹名称来制作额外的文件夹。即:"picture-set">
或者更好的选择:是创建一个文件夹,然后根据父文件夹名称创建一组编号的子文件夹。例:/home/songs -将变成:
/home/Songs/Songs-001
/home/Songs/Songs-002
/home/Songs/Songs-003
等等
请原谅我糟糕的格式…这是我第一次在这样的论坛上提问。欢迎任何关于正确格式的链接或指针。
谢谢你的帮助。
Bash有一个参数扩展,您可以使用它来生成文件夹名称作为mkdir
命令的参数:
#!/usr/bin/env bash
# Creates all directories up to 10
mkdir -p -- /home/Songs/Songs-{001..010}
如果您需要动态地更改要使用变量生成的数字范围,则此方法不是很灵活。
因此,您可以使用Bashfor
循环并打印格式的名称与所需的数字数,并创建每个目录的循环:
#!/usr/bin/env bash
start_index=1
end_index=10
for ((i=start_index; i<=end_index; i++)); do
# format a dirpath with the 3-digits index
printf -v dirpath '/home/Songs/Songs-%03d' $i
mkdir -p -- "$dirpath"
done
# Prerequisite:
mkdir Pictures
cd Pictures
# Your script:
min=1
max=12
name="$(basename "$(realpath .)")"
for num in $(seq -w $min $max); do mkdir "$name-$num"; done
# Result
ls
Pictures-01 Pictures-03 Pictures-05 Pictures-07 Pictures-09 Pictures-11
Pictures-02 Pictures-04 Pictures-06 Pictures-08 Pictures-10 Pictures-12