【问题标题】:How to grep only specified folder names如何仅grep指定的文件夹名称
【发布时间】:2011-10-24 00:33:12
【问题描述】:

我有这样的结构

201
202
203
204
205
206
2011-08-04_03-01-15
2011-08-05_03-01-15
2011-08-08_03-01-15
2011-08-09_03-00-02
2011-08-10_14-16-37

我只需要 grep 日期名称如“2011-08-05_03-01-15”的文件夹 我试过 ls | grep '201' 但输出中有 201 文件夹到

使用 ls | grep '2011' 是不可接受的,因为它是硬代码。

【问题讨论】:

  • 更适合unix.se.com
  • 不是真的,这是一个适当的编程问题,人们确实使用 bash 编写脚本

标签: bash grep directory ls


【解决方案1】:

grep:

ls -d */ | grep -E '[0-9]{4}(-[0-9]{2}){2}_([0-9]{2}-){2}[0-9]{2}'

find:

find * -regextype posix-extended \ 
       -regex '[0-9]{4}(-[0-9]{2}){2}_([0-9]{2}-){2}[0-9]{2}' \
       -type d

【讨论】:

  • 别忘了 find 的 -type d。
  • @jhclark:是的。至少,我为ls 做过。 +1。
【解决方案2】:
ls | egrep '^[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}$'

【讨论】:

    【解决方案3】:

    试试正则表达式:

    ls | grep -E "....--_*--"

    【讨论】:

      【解决方案4】:

      不用 grep 也可以做到:

      ls -d ????-??-??_??-??-??
      

      假设您没有其他文件夹名称遵循相同的模式而不是日期,这可以正常工作,例如 aaaa-bb-cc_dd-ee-ff,因为上述命令也会列出这些名称。

      您甚至可以减少限制,列出所有在第 5 位有 - 的内容:

      ls -d ????-*
      

      【讨论】:

      • 不过要小心这个。 ??? 的扩展往往由 shell(例如 bash)而不是接收程序来完成。结果是,如果有太多目录与此模式匹配,较旧的 shell 会给出参数列表太长的错误。
      【解决方案5】:

      您在手册页中拥有所有信息。 看看find

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        相关资源
        最近更新 更多