代码之家  ›  专栏  ›  技术社区  ›  Trevirius

如何使用shell脚本处理正确的文件名

  •  0
  • Trevirius  · 技术社区  · 7 年前

    我想用一些shell脚本来评估我最新文件夹中的最新文件名。 所以我得到了最新的文件夹名和里面的最新文件名:

    latest_folder=$(ls -td */ | head -n 1)
    echo $latest_folder
    cd $latest_folder
    latest_file="$(ls -t *$str | head -n 1)"
    echo $latest_file
    

    文件夹结构:

    base_folder
        |
        |---000
        |     |---123.*
        |     |---124.*
        |     |---...
        |     |---999.*
        |
        |---001
        |     |---997.*
        |     |---998.*
        |     |---999.*
    

    其中001是最新的文件夹。如果这个文件夹中的最新文件等于999.*我需要创建一个新文件夹002。

    有人知道吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   David C. Rankin    7 年前

    你的想法不远。我劝你不要 cd 进入最新的dre,只需使用相同的方案通过附加 latest_folder/ 用你的命令替换。

    一旦你有了 latest_file ,您只需使用 去掉子串的参数展开 分离前导的3位数字(例如 filenum="${latest_file%%.*}" )中。之后,您就可以根据 filenum 是的。

    如果确实需要创建新目录,则可以使用 printf -v 利用“场宽度”修改器和 '0' 填充以格式化 new_folder 名字A 002 只需添加 1 latest_folder 数字,例如 printf -v new_folder "%03d" $((latest_folder + 1)) 注意:这是在从 最新文件夹 在添加时防止解释为八进制常数 1个 为了得到 新建文件夹 数字,例如 $((latest_folder + 1)) 是的。

    总而言之,你应该能够做一些类似的事情:

    #!/bin/bash
    
    limit=999
    
    latest_folder="$(ls -td */ | head -n 1)"                ## latest folder
    latest_folder="${latest_folder:0:(-1)}"                 ## remove / at end
    latest_file="$(ls -t "$latest_folder/" | head -n 1)"    ## latest file
    filenum="${latest_file%%.*}"                            ## isolate ###
    if ((filenum == limit)); then                           ## if ### = 999
        n=0
        while [ "${latest_folder:n:1}" = '0' ]; do          ## remove zeros
            latest_folder="${latest_folder:$((n+1))}"
            ((n++))
        done
        printf -v new_folder "%03d" $((latest_folder + 1))  ## new folder name
        mkdir -p new_folder                                 ## create new folder
    fi
    

    笔记 你通常应该使用 find sort 获取目录和文件名列表(使用 -maxdepth -type 控制搜索的文件/目录的深度和类型)

    如果你有问题请告诉我。