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

bash globbing-自动扩展几个特定的案例?

  •  10
  • Fragsworth  · 技术社区  · 17 年前

    我知道通配符 * (本身)将以这样的方式展开,即“当前文件夹中的所有非隐藏文件”,其中隐藏文件的前缀是句点。

    我认为有两个用例是有用的,但我不知道如何正确地执行:

    1. 你怎么能在地球上…”当前文件夹中的所有文件,包括隐藏文件,但不包括 . 或 .. “?

    2. 你怎么能在地球上…”当前文件夹中的所有隐藏文件(仅隐藏文件),但不包括 . 或 … “?

    6 回复  |  直到 12 年前
        1
  •  15
  •   Community Mohan Dere    9 年前

    展开 paviums answer 回答问题的第二部分,除了 . 和 .. 可以这样指定:

    {.[!.]*,*}
    

    根据具体的用例,最好设置 dotglob shell选项,以便bash在 * 默认情况下:

    $ shopt -s dotglob
    $ echo *
    .tst
    
        2
  •  3
  •   pavium    17 年前

    这个 Bash Cookbook 为您的第二个要求提供解决方案。

    .[!.]*
    

    作为指定“点文件”但避免 . 和 ..

    当然, ls 有 -A 可供选择,但这不是全局性的。

        3
  •  1
  •   Dennis Williamson    17 年前

    第一个案例:

    echo {.,}[^.]*
    

    或

    echo {.,}[!.]*
    

    编辑 :

    这个好像什么都有,但比 短命的 的

    echo {.*,}[^.]*
    
        4
  •  1
  •   Zombo tliff    14 年前

    结合某物和亭子的答案

    # dot files but avoiding . and ..
    .[!.]*
    
    # all files but avoiding . and .. 
    {.[!.]*,*}
    
        5
  •  0
  •   aculich    14 年前

    “所有文件”和“所有隐藏文件”是指仅限文件,还是同时指文件和目录?globbing对名称进行操作,而不管它属于文件或目录。其他人对使用globbing查找隐藏名和非隐藏名给出了很好的答案,但您可能希望转到 find 命令作为一种更简单的替代方法,可以区分类型。

    查找“当前文件夹中的所有文件,包括隐藏文件,但不包括。或…..:

    find . -type f
    

    查找“当前文件夹中的所有文件和目录,包括隐藏文件,但不包括。或..“:

    find . ! -name .
    

    查找“当前文件夹中的所有隐藏文件(仅隐藏文件),但不包括。或…..:

    find . -name '.*' -type f
    

    查找“当前文件夹中的所有隐藏文件和目录(仅隐藏文件和目录),但不包括。或..“:

    find . -name '.*' ! -name .
    

    请注意,默认情况下,find也会在子目录中重复出现,因此如果要将其限制为只能使用当前目录,则可以使用:

    find . -maxdepth 1 -type f
    
        6
  •  0
  •   kamome    12 年前

    所以,即使这是旧的-没有使用shopt,这似乎没有得到充分的回答。但是,扩展到目前为止给出的答案,这些对我很有用:

    1:

    {*,.[!.]*,..?*}

    2:

    {.[!.]*,..?*}