该命令列出当前路径下的目录:
ls -d */
模式*/到底做什么?
我们如何在上面的命令中给出绝对路径(例如ls -d /home/alice/Documents),只列出该路径下的目录?
该命令列出当前路径下的目录:
ls -d */
模式*/到底做什么?
我们如何在上面的命令中给出绝对路径(例如ls -d /home/alice/Documents),只列出该路径下的目录?
当前回答
实际的ls解决方案,包括到目录的符号链接
这里的许多答案实际上并不使用ls(或者仅在ls -d的普通意义上使用它,而使用通配符进行实际的子目录匹配。一个真正的ls解决方案是有用的,因为它允许使用ls选项来排序顺序等。
不包括符号链接
已经给出了一个使用ls的解决方案,但它与其他解决方案不同,因为它排除了到目录的符号链接:
ls -l | grep '^d'
(可能通过sed或awk管道来隔离文件名)
包括符号链接
在应该包含到目录的符号链接的情况下(可能更常见),我们可以使用ls的-p选项,这使得它在目录名(包括符号链接的目录名)后面附加一个斜杠字符:
ls -1p | grep '/$'
或者,去掉后面的斜杠:
ls -1p | grep '/$' | sed 's/\/$//'
我们可以根据需要向ls添加选项(如果使用长列表,则不再需要-1)。
注意:如果我们想要后面的斜杠,但不希望它们被grep高亮显示,我们可以通过将实际匹配的部分设为空来删除高亮显示:
ls -1p | grep -P '(?=/$)'
其他回答
*/是一个匹配当前目录中所有子目录的模式(*将匹配所有文件和子目录;/将其限制为目录)。类似地,要列出/home/alice/Documents下的所有子目录,请使用ls -d /home/alice/Documents/*/
我只是把它添加到我的.bashrc文件中(如果你只需要/想要一个会话,你也可以在命令行上输入它):
alias lsd='ls -ld */'
然后lsd会产生想要的结果。
再加上一个完整的循环,检索每个文件夹的路径,使用Albert的答案和Gordans的组合。这应该很有用。
for i in $(ls -d /pathto/parent/folder/*/); do echo ${i%%/}; done
输出:
/pathto/parent/folder/childfolder1/
/pathto/parent/folder/childfolder2/
/pathto/parent/folder/childfolder3/
/pathto/parent/folder/childfolder4/
/pathto/parent/folder/childfolder5/
/pathto/parent/folder/childfolder6/
/pathto/parent/folder/childfolder7/
/pathto/parent/folder/childfolder8/
使用Perl:
ls | perl -nle 'print if -d;'
我发现这个解决方案是最舒服的,我添加到列表中:
find * -maxdepth 0 -type d
不同之处在于它在开始时没有./,并且文件夹名称可以随时使用。