【问题标题】:How to create a list of sequentially numbered folders using an existing folder name as the base name如何使用现有文件夹名称作为基本名称创建按顺序编号的文件夹列表
【发布时间】:2021-12-10 08:06:00
【问题描述】:

我已经编写了少量的 bash 脚本。主要是根据我的需要修改脚本。
在这一点上,我很难过。 我需要一个脚本来读取文件夹内的子文件夹名称,并根据该子文件夹名称制作一个编号的文件夹列表。

示例: 我创建了一个名为“图片”的文件夹。 然后在里面创建一个名为“picture-set”的子文件夹 我想要一个脚本来查看现有的子文件夹名称(图片集)并制作另外 10 个文件夹,并将序号附加到文件夹名称的末尾。 前任: 文件夹是:图片 子文件夹是:图片集

想要创建: “图片集-01” “图片集-02” “图片集-03” 依此类推,最多 10 个。或脚本中指定的数字。

文件夹结构如下所示:

/home/图片/图片集

/home/图片/picture-set-01

/home/Pictures/picture-set-02

/home/图片/picture-set-03 ...等等

我无法告诉脚本如何找到基本文件夹名称来创建其他文件夹。 即:“图片集”

或者更好的选择: 将创建一个文件夹,然后根据父文件夹名称创建一组编号的子文件夹。 前任: /home/Songs - 会变成:

/home/Songs/Songs-001

/home/Songs/Songs-002

/home/Songs/Songs-003

等等。

请原谅我的错误格式...这是我第一次在这样的论坛上提问。欢迎任何有关正确格式的链接或指针。

感谢您的帮助。

【问题讨论】:

    标签: bash directory mkdir


    【解决方案1】:
    # 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
    

    【讨论】:

    • seq 不是很便携,realpath 也不是,basename 最好用 POSIX ${variable##*/} 代替。无论如何,如果使用seq,您可以使用seq --format="picture-set-%03g" $min $max | xargs -I{} mkdir -p -- {}
    • 哇,完美!非常感谢您的帮助。
    【解决方案2】:

    Bash 有一个参数扩展,可用于生成文件夹名称作为mkdir 命令的参数:

    #!/usr/bin/env bash
    
    # Creates all directories up to 10
    mkdir -p -- /home/Songs/Songs-{001..010}
    

    如果您需要动态更改数字范围以使用变量生成,则此方法不是很灵活。

    因此,您可以使用 Bash for 循环并使用所需位数打印名称并在循环中创建每个目录:

    #!/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
    

    【讨论】:

      猜你喜欢
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      • 2020-12-03
      • 2018-04-28
      相关资源
      最近更新 更多