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

Shell:显示文件夹的文件内容(ls),搜索文件名并显示

  •  -1
  • firasKoubaa  · 技术社区  · 7 年前

    我有一个文件夹,其中可能包含几个文件。在这些文件中,我有如下文件:

    • 测验xml
    • 测验罐子
    • 测验JAR生成
    • 开发项目。罐子
    • ...

    和许多其他文件。仅获取“ 开发项目。罐子 “我已执行:

    ls | grep ^{{dev}}.*.jar$
    

    这将为我显示文件及其属性。但是,我只想要文件名 (仅文件名字符串)

    如何纠正??

    1 回复  |  直到 7 年前
        1
  •  3
  •   tripleee    7 年前

    ls grep 在这里两者都是不必要的。shell将显示与通配符匹配的任何文件名:

    echo dev.*.jar
    

    ( ls dev.*.jar 没有选择本身也会做类似的事情;如果您看到的不仅仅是文件名,那么您可能愚蠢地定义了 alias ls='ls -l' 或者类似的?)

    的参数 格雷普 应该是正则表达式;您指定的内容将匹配 {{dev}} 而不是 dev ,尽管在没有引用的情况下,您的shell可能已经扩展了大括号。合适的正则表达式是 grep '^dev\..*\.jar$' 其中单引号保护正则表达式不受任何shell扩展的影响,以及 . 匹配任何字符,并且 * 尽可能多次重复该字符。为了匹配文字点,我们对其进行反斜杠转义。

    仅仅打印一个文件名很少有用;很多时候,你真的想要

    for file in ./dev.*.jar; do
        echo "$file"
        : probably do more things with "$file"
    done
    

    如果这就是你想要的,也许更喜欢 printf 结束 echo ,这也可以避免循环:

    printf '%s\n' dev.*.jar