zoukankan      html  css  js  c++  java
  • 如何过滤出已知当前目录下/llj中的所有一级目录?

      测试环境,/llj下有许多的目录、文件等:

    [root@test llj]# ll
    total 0
    drwxr-xr-x 2 root root 17 Dec 3 10:04 ext
    -rw-r--r-- 1 root root 0 Dec 3 10:04 jeacen
    -rw-r--r-- 1 root root 0 Dec 3 10:03 llj
    drwxr-xr-x 2 root root 6 Dec 3 10:02 test
    -rw-r--r-- 1 root root 0 Dec 3 10:02 wodi.gz
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xiaodong
    drwxr-xr-x 2 root root 6 Dec 3 09:58 xiaofan
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xingfujie
    -rw-r--r-- 1 root root 0 Dec 3 10:02 yingsui.gz
    [root@test llj]#

    目标:过滤出已知当前目录下/llj中的所有一级目录

    解决方案:

    一、观察到 ll /llj 中目录的信息都是以 d 开头,使用 grep,和正则筛选出来。

    [root@test llj]# ls -l |grep "^d"
    drwxr-xr-x 2 root root 17 Dec 3 10:04 ext
    drwxr-xr-x 2 root root 6 Dec 3 10:02 test
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xiaodong
    drwxr-xr-x 2 root root 6 Dec 3 09:58 xiaofan
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xingfujie

    二、观察到目录的第二列连接数都是 >1(=2),使用 awk 删选:

    [root@test llj]# ls -l |awk '$2>1'
    drwxr-xr-x 2 root root 17 Dec 3 10:04 ext
    drwxr-xr-x 2 root root 6 Dec 3 10:02 test
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xiaodong
    drwxr-xr-x 2 root root 6 Dec 3 09:58 xiaofan
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xingfujie

    三、给目录一定的特征,想到 ls 的 -p 和-F参数,让目录后跟/,那么用 grep 删选出 / 结尾的:

    [root@test llj]# ls -lp|grep '/$'
    drwxr-xr-x 2 root root 17 Dec 3 10:04 ext/
    drwxr-xr-x 2 root root 6 Dec 3 10:02 test/
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xiaodong/
    drwxr-xr-x 2 root root 6 Dec 3 09:58 xiaofan/
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xingfujie/

    [root@test llj]# ls -lF|grep '/$'
    drwxr-xr-x 2 root root 17 Dec 3 10:04 ext/
    drwxr-xr-x 2 root root 6 Dec 3 10:02 test/
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xiaodong/
    drwxr-xr-x 2 root root 6 Dec 3 09:58 xiaofan/
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xingfujie/

    四、既然 ls 可以,那么 tree 当然可以,使用tree的 -F 参数,然后删选出 / :

    [root@test llj]# tree -L 1 -F |grep '/'
    |-- ext/
    |-- test/
    |-- xiaodong/
    |-- xiaofan/
    |-- xingfujie/

    五、直接使用 tree 的 -d 参数,只显示目录:

    [root@test llj]# tree -Ld 1  | grep -v '.'
    |-- ext
    |-- test
    |-- xiaodong
    |-- xiaofan
    `-- xingfujie

    5 directories

    六、是时候使用 find 了,-maxdepth参数可以指定查找的目录级数为1,-type可以指定查找类型为目录,! 和 -name参数可以去除查找到的当前目录 . ,实现如下:

    [root@test llj]# find -maxdepth 1 -type d ! -name "."
    ./ext
    ./xiaofan
    ./test
    ./xiaodong
    ./xingfujie

    七、使用sed和awk过滤ls结果

    [root@test llj]# ls -l | sed -n '/^d/p'
    drwxr-xr-x 2 root root 17 Dec 3 10:04 ext
    drwxr-xr-x 2 root root 6 Dec 3 10:02 test
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xiaodong
    drwxr-xr-x 2 root root 6 Dec 3 09:58 xiaofan
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xingfujie

    [root@test llj]# ls -l | awk '/^d/'
    drwxr-xr-x 2 root root 17 Dec 3 10:04 ext
    drwxr-xr-x 2 root root 6 Dec 3 10:02 test
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xiaodong
    drwxr-xr-x 2 root root 6 Dec 3 09:58 xiaofan
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xingfujie

    [root@test llj]# ls -F | sed -n '//$/p'
    ext/
    test/
    xiaodong/
    xiaofan/
    xingfujie/

    [root@test llj]# ls -F | awk '//$/'
    ext/
    test/
    xiaodong/
    xiaofan/
    xingfujie/

    八、另类查询办法

    [root@test llj]# ls -dl */
    drwxr-xr-x 2 root root 17 Dec 3 10:04 ext/
    drwxr-xr-x 2 root root 6 Dec 3 10:02 test/
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xiaodong/
    drwxr-xr-x 2 root root 6 Dec 3 09:58 xiaofan/
    drwxr-xr-x 2 root root 6 Dec 3 10:04 xingfujie/

    源自:晓明酱

    
    
  • 相关阅读:
    WPF简单的分页控件实现
    WPF常用样式总结
    树:重建二叉树
    从尾到头打印链表
    字符串替换空格
    二维数组中的查找
    C#中转换运算符explicit、implicit、operator、volatile研究
    泛型实现常用算法
    .NET架构师知识普及
    .NET中扩展方法和Enumerable(System.Linq)
  • 原文地址:https://www.cnblogs.com/liulj0713/p/7966470.html
Copyright © 2011-2022 走看看