该命令列出当前路径下的目录:

ls -d */

模式*/到底做什么?

我们如何在上面的命令中给出绝对路径(例如ls -d /home/alice/Documents),只列出该路径下的目录?


当前回答

*/是一个文件名匹配模式,匹配当前目录中的目录。

只列出目录,我喜欢这个函数:

# Long list only directories
llod () {
  ls -l --color=always "$@" | grep --color=never '^d'
}

把它放在你的。bashrc文件中。

使用例子:

llod       # Long listing of all directories in current directory
llod -tr   # Same but in chronological order oldest first
llod -d a* # Limit to directories beginning with letter 'a'
llod -d .* # Limit to hidden directories

注意:如果您使用-i选项,它将中断。这里有一个解决方案:

# Long list only directories
llod () {
  ls -l --color=always "$@" | egrep --color=never '^d|^[[:digit:]]+ d'
}

其他回答

Ls和awk(不含grep)

No need to use grep since awk can perform regularexpressino check so it is enough to do this:

ls -l | awk '/^d/ {print $9}'

ls -l列出有权限的文件 Awk滤波器输出 '/^d/'正则表达式,只搜索以字母d开头的行(作为目录),并查看第一行-权限 {print}将打印所有列 {print $9}将只打印ls -l输出中的第9列(name)

非常简单明了

我使用:

ls -d */ | cut -f1 -d'/'

这将创建一个没有结尾斜杠的单列——在脚本中很有用。

供您参考,如果您想以多行打印所有文件,您可以执行ls -1,这将以单独的行打印每个文件。 file1 file2 file3

file * | grep directory

输出(在我的机器上)——

[root@rhel6 ~]# file * | grep directory
mongo-example-master:    directory
nostarch:                directory
scriptzz:                directory
splunk:                  directory
testdir:                 directory

以上输出可以通过使用cut进行进一步细化:

file * | grep directory | cut -d':' -f1
mongo-example-master
nostarch
scriptzz
splunk
testdir

* could be replaced with any path that's permitted
 file - determine file type
 grep - searches for string named directory
 -d - to specify a field delimiter
 -f1 - denotes field 1

只从“这里”列出目录的一行程序。

文件计数。

for i in `ls -d */`; do g=`find ./$i -type f -print| wc -l`; echo "Directory $i contains $g files."; done