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/

    源自:晓明酱

    
    
  • 相关阅读:
    数据报表开发技巧:自动为数据报表添加【小计】、【总计】行
    使用Xamarin开发手机聊天程序 -- 基础篇(大量图文讲解 step by step,附源码下载)
    如何让服务端同时支持WebSocket和SSL加密的WebSocket(即同时支持ws和wss)?
    Unity3D 预备知识:C#与Lua相互调用
    进程守护系统,你懂吗?
    Xamarin 跨移动端开发系列(01) -- 搭建环境、编译、调试、部署、运行
    程序员与禅的对话录
    技术人的慰藉
    我的作品
    自动升级系统的设计与实现(续2) -- 增加断点续传功能 (附最新源码)
  • 原文地址:https://www.cnblogs.com/liulj0713/p/7966470.html
Copyright © 2011-2022 走看看