V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
asmoker
V2EX  ›  分享创造

搞了个批量创建层级文件夹的小破工具,有需要的可以体验下~ 😀

  •  
  •   asmoker ·
    asmoker · 2022-07-22 19:08:29 +08:00 · 1736 次点击
    这是一个创建于 860 天前的主题,其中的信息可能已经有所发展或是发生改变。

    搞了个批量创建层级文件夹的小破工具,有需要的可以体验下~ 😀

    https://mkdir.threep.top/

    6 条回复    2022-08-01 23:25:28 +08:00
    zxCoder
        1
    zxCoder  
       2022-07-22 21:47:28 +08:00
    挺有意思,不过暂时没这个需求 hhh
    wxf666
        2
    wxf666  
       2022-07-22 23:08:44 +08:00   ❤️ 1
    有意思,也来写个 bash 版的

    1. 默认去除前面的 1.1.2 、doc.math 之类的键名
    2. 允许不按顺序指定目录,如此顺序可打乱:1 、1.1 、1.2 、1.2.1 、1.2.2
    3. 父目录不存在,会在另一指定地方创建:1 、1.2.1 (不存在 1.2 ,所以 1.2.1 不会在 1 之下)

    #!/bin/bash

    declare -a SEP=('.' ' ')
    declare -r WORK_DIR='./'
    declare -r DANG_DIR='./dangling/'
    declare -r EXCLUDE_KEY=yes # 若要包含 1.1.2 之类的键名,设为空字符串

    declare -A dict=([${SEP[0]}]=$WORK_DIR)

    sed '/^$/d' <<EOF | sort |
    doc.eng 英语
    doc 考研资料
    doc.math 数学
    doc.movie 电影

    2.3.1 ???
    2.3.1.1 !!!
    2.2.1 Beyond
    2 音乐
    2.2 粤语
    2.1.2 张震岳
    2.1.1 周杰伦
    2.1 华语
    EOF
    while read -r path; do
       key=${SEP[0]}${path%%"${SEP[1]}"*}
       parent=${key%"${SEP[0]}"*}
       dict[$key]=${dict[${parent:-${SEP[0]}}]:-$DANG_DIR}${path#${EXCLUDE_KEY:+*${SEP[1]}}}/
       echo "${dict[$key]}"
    done | tee /dev/stderr | xargs -d $'\n' mkdir

    输出并创建:

    ./音乐 /
    ./音乐 /华语 /
    ./音乐 /华语 /周杰伦 /
    ./音乐 /华语 /张震岳 /
    ./音乐 /粤语 /
    ./音乐 /粤语 /Beyond/
    ./dangling/???/
    ./dangling/???/!!!/
    ./考研资料 /
    ./考研资料 /英语 /
    ./考研资料 /数学 /
    ./考研资料 /电影 /
    wxf666
        3
    wxf666  
       2022-07-23 00:52:33 +08:00   ❤️ 3
    再来个 json 版的:

    jq -r '
       def work($obj; $path):
         if ($obj | type) == "object" then
          $obj | to_entries[] | (
            $path + .key + "/",
             work(.value; $path + .key + "/")
          )
         elif ($obj | type) == "array" then
          ($obj[] | work(.; $path))
         else
          ($path + $obj + "/")
         end;

       work(.; "./")
    ' <<< '
    {
      "考研资料": ["数学", "英语", "电影"],
      "音乐": {
        "华语": ["周杰伦", [[["张震岳"]]]],
        "粤语": "Beyond"
      }
    }' | tee /dev/stderr | xargs -d $'\n' mkdir

    输出并创建:

    ./考研资料 /
    ./考研资料 /数学 /
    ./考研资料 /英语 /
    ./考研资料 /电影 /
    ./音乐 /
    ./音乐 /华语 /
    ./音乐 /华语 /周杰伦 /
    ./音乐 /华语 /张震岳 /
    ./音乐 /粤语 /
    ./音乐 /粤语 /Beyond/
    asmoker
        4
    asmoker  
    OP
       2022-07-25 10:50:26 +08:00
    @wxf666 👍👍👍👍 这个🐂 🍺
    Cmei
        5
    Cmei  
       2022-07-26 00:11:14 +08:00 via iPhone
    能不能搞个批量创建文件夹功能,比如创建 100 个没有,以姓名 命名的 文件夹。
    atshow
        6
    atshow  
       2022-08-01 23:25:28 +08:00
    小工具不错,已经收录至我的导航站。望长期维护。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5920 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:28 · PVG 10:28 · LAX 18:28 · JFK 21:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.