1、如何过滤出已知当前目录下/data中的所有一级目录?

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

[root@oldboy2 /]# 
[root@oldboy2 /]# cd /data
[root@oldboy2 data]# ll
total 32
drwxr-xr-x. 2 root     root  4096 Apr 30 05:27 111
-rw-r--r--. 1 root     users    0 Apr 28 14:18 1.sh
-rw-r--r--. 1 root     users    0 Apr 28 14:18 2.sh
-rw-r--r--. 1 root     users    0 Apr 28 14:18 3.sh
-rw-r--r--. 1 root     root     0 Apr 30 05:49 alex.txt
drwxr-xr-x. 2 root     root  4096 Apr 30 05:49 data
-rwxr-xr-x. 1 root     root     0 Apr 30 05:49 ett.txt
-rw-r--r--. 1 root     users   50 Apr 28 21:38 hello.txt
drwxr-xr-x. 2 root     root  4096 Apr 30 05:50 oldboy
drwxr-xr-x. 2 root     root  4096 Apr 30 05:49 test
-rw-r--r--. 1 xiaoming users  296 Apr 29 11:15 test.txt
-rw-------. 1 root     users  292 Apr 29 09:44 test.txt.bak
drwxr-xr-x. 2 root     root  4096 Apr 30 05:49 xiaomi

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

解决方案:

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

[root@oldboy2 data]# ls -l |grep "^d"
drwxr-xr-x. 2 root     root  4096 Apr 30 05:27 111
drwxr-xr-x. 2 root     root  4096 Apr 30 05:49 data
drwxr-xr-x. 2 root     root  4096 Apr 30 05:50 oldboy
drwxr-xr-x. 2 root     root  4096 Apr 30 05:49 test
drwxr-xr-x. 2 root     root  4096 Apr 30 05:49 xiaomi

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

[root@oldboy2 data]# ls -l |awk '$2>1'
total 32
drwxr-xr-x. 2 root     root  4096 Apr 30 05:27 111
drwxr-xr-x. 2 root     root  4096 Apr 30 05:49 data
drwxr-xr-x. 2 root     root  4096 Apr 30 05:50 oldboy
drwxr-xr-x. 2 root     root  4096 Apr 30 05:49 test
drwxr-xr-x. 2 root     root  4096 Apr 30 05:49 xiaomi

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

[root@oldboy2 data]# ls -lp|grep '/$'
drwxr-xr-x. 2 root     root  4096 Apr 30 05:27 111/
drwxr-xr-x. 2 root     root  4096 Apr 30 05:49 data/
drwxr-xr-x. 2 root     root  4096 Apr 30 05:50 oldboy/
drwxr-xr-x. 2 root     root  4096 Apr 30 05:49 test/
drwxr-xr-x. 2 root     root  4096 Apr 30 05:49 xiaomi/

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

[root@oldboy2 data]# tree -L 1 -F |grep '/'
├── 111/
├── data/
├── oldboy/
├── test/
└── xiaomi/

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

[root@oldboy2 data]# tree -L 1 -d
.
├── 111
├── data
├── oldboy
├── test
└── xiaomi

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

[root@oldboy2 data]# find -maxdepth 1 -type d ! -name "."
./test
./xiaomi
./oldboy
./111
./data

 

参考:李泳宜---预习视频

posted @ 2017-05-08 16:56  晓明酱  阅读(939)  评论(0编辑  收藏  举报