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/

    源自:晓明酱

    
    
  • 相关阅读:
    模拟赛总结
    2018.04.06学习总结
    2018.04.06学习总结
    Java实现 LeetCode 672 灯泡开关 Ⅱ(数学思路问题)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
  • 原文地址:https://www.cnblogs.com/liulj0713/p/7966470.html
Copyright © 2011-2022 走看看