【问题标题】:get subfolders under a folder named with uppercases only获取仅以大写字母命名的文件夹下的子文件夹
【发布时间】:2022-01-01 05:09:33
【问题描述】:

我想获取名称仅大写的子文件夹列表(仅文件夹名称,没有前导 pardir 或尾随 /)。

我尝试了find . -maxdepth 1 -type d -name '[A-Z]+',但它不起作用。

【问题讨论】:

  • 试试-regex './[A-Z]+' 而不是-name '[A-Z]+'
  • 使用 bash 扩展模式匹配运算符(不带find):shopt -s extglob; dirs=(+([A-Z])/); printf '%s\n' "${dirs[@]%?}"
  • @M.NejatAydin,将其添加为答案

标签: bash path find filenames


【解决方案1】:

如果您想在 Regex 中使用大写名称,请使用 [:upper:] 类名:

find . -maxdepth 1 -type d -regextype posix-extended -regex './[[:upper:]]+'

或使用 Bash 的 extglob 扩展通配符:

shopt -s extglob
printf %s\\n +([[:upper:]])/

【讨论】:

    【解决方案2】:

    -name 运算符没有像您预期的那样使用正则表达式。相反,它使用类似于here 中描述的 bash 通配符系统的“通配符”。

    您可能希望使用-regex 运算符,如文档的Full Name Patterns 部分所述。使用这个你应该有一个类似的命令:

    find . -maxdepth 1 -regex '\./[A-Z]+'
    

    您可以使用Run Commands 部分中描述的选项执行任何其他路径操作。

    【讨论】:

    • 谢谢,但为什么find . -maxdepth 1 -regex '[A-Z]+' 不起作用?我可以使用find . -maxdepth 1 -regex '\./[A-Z]+' | cut -d'/' -f2 删除前导./,但它不能推广到任意路径而不是./
    • 糟糕,我好像忘记添加链接了。 -regex 属于一组运算符,它们查看文件的完整路径而不是基本名称,因此您还必须考虑正则表达式模式中的父目录。请参阅Full Name Patterns 下的文档
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 2016-02-05
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2019-04-10
    • 2021-03-05
    相关资源
    最近更新 更多