• NO16 第二关课后考试-aw-F-过滤已知的一级目录


    ·总结的经验:
    1、学会总结时学好运维的重要前提。
    2、通过案列或例子来总结一个技术点或者命令。
    3、画一张逻辑图,形象的卡通记忆这个知识技术点。
    4、通过管道过滤数据时,最好先输出结果,然后回退再使用管道看着结果过滤。


    一、如何过滤出已知当前目录下oldboy中的所有一级目录(提示:不包含oldboy目录下面目录的子目录及隐藏目录,即只能是以及目录)?

    分析过程:要完成此题,我们首先要想如何区分目录和文件?
    1 根据颜色区分
    2 ls -l 输出结果中以d(directory)开头的就是目录
    3 ls -l 输出结果中第二列数字大于1的就是目录(文件没有硬链接的情况下是对的)
    4 通过给目录加标识,然后通过滤标识就过滤出目录
     (ls -F给不同文件加不同符号 或ls -p 只给目录加斜线)
    5 通过find直接查找指定类型的文件(-d就是目录)

    创建环境:
    [root@localhost oldboy]# mkdir ext/oldboy 1 2 3 4 a b c d -p
    [root@localhost oldboy]# tree
    .
    ├── 1
    ├── 123.log
    ├── 2
    ├── 3
    ├── 4
    ├── a
    ├── b
    ├── c
    ├── d
    ├── ext
    │   └── oldboy
    └── oldboy

    11 directories, 1 file
    [root@localhost oldboy]# ls -l
    total 696
    drwxr-xr-x 2 root root      6 Jun  1 02:39 1
    -rw-r--r-- 1 root root 712614 Apr  1 00:16 123.log
    drwxr-xr-x 2 root root      6 Jun  1 02:39 2
    drwxr-xr-x 2 root root      6 Jun  1 02:39 3
    drwxr-xr-x 2 root root      6 Jun  1 02:39 4
    drwxr-xr-x 2 root root      6 Jun  1 02:39 a
    drwxr-xr-x 2 root root      6 Jun  1 02:39 b
    drwxr-xr-x 2 root root      6 Jun  1 02:39 c
    drwxr-xr-x 2 root root      6 Jun  1 02:39 d
    drwxr-xr-x 3 root root     20 Jun  1 02:41 ext
    drwxr-xr-x 2 root root      6 Jun  1 02:39 oldboy
    [root@localhost oldboy]# ls -F   (给目录加标识,-F 给不同文件加不同符号)
    1/  123.log  2/  3/  4/  a/  b/  c/  d/  ext/  oldboy/
    [root@localhost oldboy]# ls -p   (给目录加标识,-p 只给目录加斜线)
    1/  123.log  2/  3/  4/  a/  b/  c/  d/  ext/  oldboy/


    方法一:
    [root@localhost oldboy]# ls -l|grep "^d"
    drwxr-xr-x 2 root root      6 Jun  1 02:39 1
    drwxr-xr-x 2 root root      6 Jun  1 02:39 2
    drwxr-xr-x 2 root root      6 Jun  1 02:39 3
    drwxr-xr-x 2 root root      6 Jun  1 02:39 4
    drwxr-xr-x 2 root root      6 Jun  1 02:39 a
    drwxr-xr-x 2 root root      6 Jun  1 02:39 b
    drwxr-xr-x 2 root root      6 Jun  1 02:39 c
    drwxr-xr-x 2 root root      6 Jun  1 02:39 d
    drwxr-xr-x 3 root root     20 Jun  1 02:41 ext
    drwxr-xr-x 2 root root      6 Jun  1 02:39 oldboy

    方法二:
    [root@localhost oldboy]# ls -F
    1/  123.log  2/  3/  4/  a/  b/  c/  d/  ext/  oldboy/
    [root@localhost oldboy]# ls -F|grep "/$"       (/$:以/为结尾的)
    1/
    2/
    3/
    4/
    a/
    b/
    c/
    d/
    ext/
    oldboy/

    方法三:
    [root@localhost oldboy]# find ./ -maxdepth 1 -type d   (-maxdepth 1表示查找命令的深度)
    ./    (./*比./多个*:表示只找./目录下的不包括./目录本身,这里就有./本身)
    ./1
    ./2
    ./3
    ./4
    ./a
    ./b
    ./c
    ./d
    ./oldboy
    ./ext
    [root@localhost oldboy]# find ./* -maxdepth 1 -type d  (./*比./多个*:表示只找./目录下的不包括./目录本身)
    ./1
    ./2
    ./3
    ./4
    ./a
    ./b
    ./c
    ./d
    ./ext
    ./ext/oldboy   (怎么去掉这个子目录?-type d后面加 ! -name ".")
    ./oldboy
    [root@localhost oldboy]# find . -maxdepth 1 -type d ! -name "."
    ./1
    ./2
    ./3
    ./4
    ./a
    ./b
    ./c
    ./d
    ./oldboy
    ./ext

    方法四:(第二列数字大于1的就是目录)
    [root@localhost oldboy]# ls -l
    total 696
    drwxr-xr-x 2 root root      6 Jun  1 02:39 1
    -rw-r--r-- 1 root root 712614 Apr  1 00:16 123.log
    drwxr-xr-x 2 root root      6 Jun  1 02:39 2
    drwxr-xr-x 2 root root      6 Jun  1 02:39 3
    drwxr-xr-x 2 root root      6 Jun  1 02:39 4
    drwxr-xr-x 2 root root      6 Jun  1 02:39 a
    drwxr-xr-x 2 root root      6 Jun  1 02:39 b
    drwxr-xr-x 2 root root      6 Jun  1 02:39 c
    drwxr-xr-x 2 root root      6 Jun  1 02:39 d
    drwxr-xr-x 3 root root     20 Jun  1 02:41 ext
    drwxr-xr-x 2 root root      6 Jun  1 02:39 oldboy
    [root@localhost oldboy]# ls -l|awk '{if($2>1) print $0}'  ($2>1,第二列大于1。$0输入整行)
    total 696
    drwxr-xr-x 2 root root      6 Jun  1 02:39 1
    drwxr-xr-x 2 root root      6 Jun  1 02:39 2
    drwxr-xr-x 2 root root      6 Jun  1 02:39 3
    drwxr-xr-x 2 root root      6 Jun  1 02:39 4
    drwxr-xr-x 2 root root      6 Jun  1 02:39 a
    drwxr-xr-x 2 root root      6 Jun  1 02:39 b
    drwxr-xr-x 2 root root      6 Jun  1 02:39 c
    drwxr-xr-x 2 root root      6 Jun  1 02:39 d
    drwxr-xr-x 3 root root     20 Jun  1 02:41 ext
    drwxr-xr-x 2 root root      6 Jun  1 02:39 oldboy

    方法五:
    [root@localhost oldboy]# ls -dl */    (这个不常用)
    drwxr-xr-x 2 root root  6 Jun  1 02:39 1/
    drwxr-xr-x 2 root root  6 Jun  1 02:39 2/
    drwxr-xr-x 2 root root  6 Jun  1 02:39 3/
    drwxr-xr-x 2 root root  6 Jun  1 02:39 4/
    drwxr-xr-x 2 root root  6 Jun  1 02:39 a/
    drwxr-xr-x 2 root root  6 Jun  1 02:39 b/
    drwxr-xr-x 2 root root  6 Jun  1 02:39 c/
    drwxr-xr-x 2 root root  6 Jun  1 02:39 d/
    drwxr-xr-x 3 root root 20 Jun  1 02:41 ext/
    drwxr-xr-x 2 root root  6 Jun  1 02:39 oldboy/

    方法六:
    [root@localhost oldboy]# ls -l|sed -n '/^d/p'   (sed命令过滤功能记一下,^d表示以d开头)
    drwxr-xr-x 2 root root      6 Jun  1 02:39 1
    drwxr-xr-x 2 root root      6 Jun  1 02:39 2
    drwxr-xr-x 2 root root      6 Jun  1 02:39 3
    drwxr-xr-x 2 root root      6 Jun  1 02:39 4
    drwxr-xr-x 2 root root      6 Jun  1 02:39 a
    drwxr-xr-x 2 root root      6 Jun  1 02:39 b
    drwxr-xr-x 2 root root      6 Jun  1 02:39 c
    drwxr-xr-x 2 root root      6 Jun  1 02:39 d
    drwxr-xr-x 3 root root     20 Jun  1 02:41 ext
    drwxr-xr-x 2 root root      6 Jun  1 02:39 oldboy

    [root@localhost oldboy]# ls -F|sed -n '//$/p'  (也可以过滤以/结尾的)
    1/
    2/
    3/
    4/
    a/
    b/
    c/
    d/
    ext/
    oldboy/


    方法七:
    [root@localhost oldboy]# ls -l|awk '/^d/'        (awk命令过滤功能记一下,^d表示以d开头)
    drwxr-xr-x 2 root root      6 Jun  1 02:39 1
    drwxr-xr-x 2 root root      6 Jun  1 02:39 2
    drwxr-xr-x 2 root root      6 Jun  1 02:39 3
    drwxr-xr-x 2 root root      6 Jun  1 02:39 4
    drwxr-xr-x 2 root root      6 Jun  1 02:39 a
    drwxr-xr-x 2 root root      6 Jun  1 02:39 b
    drwxr-xr-x 2 root root      6 Jun  1 02:39 c
    drwxr-xr-x 2 root root      6 Jun  1 02:39 d
    drwxr-xr-x 3 root root     20 Jun  1 02:41 ext
    drwxr-xr-x 2 root root      6 Jun  1 02:39 oldboy

    [root@localhost oldboy]# ls -F|awk '//$/'    (也可以过滤以/结尾的)
    1/
    2/
    3/
    4/
    a/
    b/
    c/
    d/
    ext/
    oldboy/

    上述方法总结:
    一、ls -l|grep "^d"   
        #以d开头的

    二、ls -l|awk '{if($2>1) print $0}' 
        #第二列数字大于1的

    三、ls -F|grep "/$"  
        #给目录加标识,-F 给不同文件加不同符号
          ls -p|grep "/$"  
        #给目录加标识,-p 只给目录加斜线         

    四、find . -maxdepth 1 -type d ! -name "."   
        #find加深度-maxdepth,类型d,然后取反,不包含名字为.的当前目录。

    五、[root@localhost oldboy]# ls -dl */    (这个不常用)

    六、[root@localhost oldboy]# ls -l|sed -n '/^d/p' (sed命令过滤功能记一下,^d表示以d开头)
        [root@localhost oldboy]# ls -F|sed -n '//$/p'  (也可以过滤以/结尾的)

    七、[root@localhost oldboy]# ls -l|awk '/^d/' (awk命令过滤功能记一下,^d表示以d开头)
        [root@localhost oldboy]# ls -F|awk '//$/'    (也可以过滤以/结尾的)

    awk命令:

    ·awk        #(三剑客老大)过滤,输出内容,自成一门语言。 NR:行号
                  $1,2...  第一,二...列以此类推。但$0:标识一行。
                  -F 指定分隔符(-F ":"以:为分隔。$NF是最后一列。$1,$4,$NF逗号让结果间有空格)
                     [root@localhost oldboy]# tail -1 /etc/passwd
                     oldboy:x:1001:1001::/home/oldboy:/bin/bash
                     [root@localhost oldboy]# awk -F ":" 'NR==1 {print $6}' /etc/passwd
                     /root
                     [root@localhost oldboy]# awk -F ":" 'NR==1 {print $NF}' /etc/passwd
                     /bin/bash
                     [root@localhost oldboy]# awk -F ":" 'NR==1 {print $1,$4,$NF}' /etc/passwd
                      root 0 /bin/bash


    Linux三剑客(只适合grep,sed,awk)正则表达式,对普通命令不适合(通配符)
    1 ^    #以...开头,^d,意思是以d开头
    2 $    #以...结尾,/$,意思是以/结尾
    3     #让原本有意义的字符脱掉马甲,还原它本身的含义
    4 .    #代表任意单个字符
    5 *    #代表所有

  • 相关阅读:
    开车旅行(codevs 1199)
    云serverlinux又一次挂载指定文件夹(非扩充)
    百度之星资格赛 hdu 4826 Labyrinth 动态规划
    Linux下基于源代码方式安装MySQL 5.6
    ACM-最短路之中的一个个人的旅行——hdu2066
    新辰:共享是SEO的思维 用户是SEO的核心
    servlet中生成验证码
    Linux ls 排序
    我想要得那块牌—记烟台大学第一届"ACM讲堂"
    coocs2d-html5在使用cocoseditor时调用设备的accelerometer来使用重力感应
  • 原文地址:https://www.cnblogs.com/sinsenliu/p/8986813.html
Copyright © 2020-2023  润新知