Linux/UNIX仅列出目录或目录名称

时间:2020-01-09 10:41:45  来源:igfitidea点击:

如何在Linux和UNIX之类的操作系统上仅列出目录名称?
如何仅在Linux中列出目录?

Linux或类似UNIX的系统使用ls命令列出文件和目录。
但是,ls没有选择仅列出目录。

您可以使用ls命令和grep命令的组合仅列出目录名称。
您也可以使用find命令。
在本快速教程中,您将学习如何仅列出Linux或UNIX中的目录。

显示或列出Unix中的所有目录

执行以下命令:

$ ls -l | grep `^d'
$ ls -l | egrep `^d'

或者最好尝试以下ls命令仅列出当前目录的目录:

$ ls -d */

Linux使用ls命令仅列出目录

运行以下ls命令:

ls -d */

在Linux或类似Unix的系统中使用ls命令仅列出目录

Linux仅显示或列出文件

执行以下命令以仅列出Linux或Unix中的文件:

$ ls -l | egrep -v '^d'
$ ls -l | egrep -v '^d'

grep命令用于搜索输入。
它将通过匹配第一个字符d来过滤目录名称。
要反转效果,即仅显示文件,您需要传递-v选项。
它会反转匹配感,以选择不匹配的行。

创建bash shell别名以节省时间

您可以如下创建两个别名,以仅列出目录和文件。

alias lf="ls -l | egrep -v '^d'"
alias ldir='ls -d */'
##alias ldir="ls -l | egrep '^d'"

在bash shell启动文件中的两个别名上方:

$ cd
$ vi .bash_profile

追加两行:

alias lf="ls -l | egrep -v '^d'"
alias ldir='ls -d */'
#alias ldir="ls -l | egrep '^d'"

保存并关闭vim中的文件。
现在只需执行lf即可列出文件。
再次运行ldir仅列出目录:

$ cd /etc
$ lf

输出示例:

-rw-r--r--   1 root root      2149 2006-09-04 23:25 adduser.conf
-rw-r--r--   1 root root        44 2006-09-29 05:11 adjtime
-rw-r--r--   1 root root       197 2006-09-04 23:48 aliases
-rw-------   1 root root       144 2002-01-18 13:43 at.deny
-rw-r--r--   1 root root       162 2006-09-22 23:24 aumixrc
-rw-r--r--   1 root root        28 2006-09-22 23:24 aumixrc1
....
..
....

仅列出目录名称:

$ cd /etc
$ ldir

输出示例:

drwxr-xr-x   4 root root      4096 2006-09-22 16:41 alsa
drwxr-xr-x   2 root root      4096 2006-09-20 20:59 alternatives
drwxr-xr-x   6 root root      4096 2006-09-22 16:41 apm
drwxr-xr-x   3 root root      4096 2006-09-07 02:51 apt
drwxr-xr-x   2 root root      4096 2006-09-08 01:46 bash_completion.d
....
.....
.

使用find命令列出Linux上的文件或目录

find命令可用于如下列出/nas中的所有目录,执行:

find /nas -type d
find /nas -type d -ls
find . -type d -ls

输出示例:

1070785    8 drwxrwxrwt   8 root     root         4096 Jul  5 07:12 .
1070797    8 drwx------   2 root     root         4096 Jul  4 07:22 ./orbit-root
1070843    8 drwxr-xr-x   2 root     root         4096 Jun 16 18:55 ./w
1070789    8 drwxr-xr-x  10 root     root         4096 Jun 17 14:54 ./b
1071340    8 drwxr-xr-x   2 root     root         4096 Jun 16 18:55 ./b/init.d
1071581    8 drwxr-xr-x   3 root     root         4096 Jun 16 18:55 ./b/bind
1071584    8 drwxr-xr-x   2 root     root         4096 Jun 16 18:55 ./b/bind/bak
1071617    8 drwxr-xr-x   2 root     root         4096 Jun 16 18:55 ./b/fw
1071628    8 drwxr-xr-x   8 root     root         4096 Jun 16 18:55 ./b/scripts

传递-maxdepth 0以将列表限制到起点,即仅当前工作目录:

find /path/to/dir -maxdepth 1 -type d
find . -maxdepth 1 -type d
find . -maxdepth 1 -type d -ls

在Linux中使用find命令仅列出目录

查找并删除bak目录

假设您要查找所有扩展名为.bak的目录并将其删除,请在当前目录中运行以下find命令:

find . -type d -iname ".bak" -delete

验证一下:

find . -type d -iname ".bak" -ls