代码之家  ›  专栏  ›  技术社区  ›  Fredrik Pihl

bash filename globbing-对以大写字母开头的文件进行操作

  •  9
  • Fredrik Pihl  · 技术社区  · 14 年前

    adfjhu.jpg  Afgjo.jpg  
    Bdfji.jpg   bkdfjhru.jpg
    Cdfgj.jpg   cfgir.jpg
    Ddfgjr.jpg  dfgjrr.jpg
    

    如何删除或列出以大写字母开头的文件?

    这可以通过以下方法来解决 find , grep xargs

    但是在bash中使用普通的文件globbing/模式匹配是可能的吗?

    下面的cmd不起作用,因为(据我所知)LANG设置为 en_US 以及排序顺序。

    $ ls [A-Z]*.jpg
    Afgjo.jpg  Bdfji.jpg  bkdfjhru.jpg  Cdfgj.jpg  cfgir.jpg  Ddfgjr.jpg  dfgjrr.jpg
    

    $ ls +(A|B|C|D)*.jpg
    Afgjo.jpg  Bdfji.jpg  Cdfgj.jpg  Ddfgjr.jpg
    

    但我不想为了一个通解而对所有的角色都这么做!

    那么这有可能吗?

    干杯 //弗雷德里克

    3 回复  |  直到 14 年前
        1
  •  5
  •   Lesmana    14 年前

    您应该将区域设置为 C (或 POSIX )区域设置。

    $ LC_ALL=C ls [A-Z]*.jpg
    

    $ LC_ALL=C ls [[:upper:]]*.jpg
    

    阅读此处了解更多信息: http://www.opengroup.org/onlinepubs/007908799/xbd/locale.html

        2
  •  5
  •   Dennis Williamson    14 年前

    ls -l [[:upper:]]*
    

    man 7 regex 有关字符类和其他信息的列表。

    在方括号表达式中,括在“[:”和“:]”中的字符类的名称表示属于该类的所有字符的列表。标准字符类名为:

    alnum    digit    punct  
    alpha    graph    space  
    blank    lower    upper  
    cntrl    print    xdigit  
    
        3
  •  2
  •   rubo77    9 年前

    使用 grep

    ls | grep -e ^[A-Z]
    

    如果你想多用一个 for

    for i in $(ls | grep -e ^[A-Z]); do echo $i ;done