该命令列出当前路径下的目录:
ls -d */
模式*/到底做什么?
我们如何在上面的命令中给出绝对路径(例如ls -d /home/alice/Documents),只列出该路径下的目录?
该命令列出当前路径下的目录:
ls -d */
模式*/到底做什么?
我们如何在上面的命令中给出绝对路径(例如ls -d /home/alice/Documents),只列出该路径下的目录?
当前回答
供您参考,如果您想以多行打印所有文件,您可以执行ls -1,这将以单独的行打印每个文件。 file1 file2 file3
其他回答
*/是一个匹配当前目录中所有子目录的模式(*将匹配所有文件和子目录;/将其限制为目录)。类似地,要列出/home/alice/Documents下的所有子目录,请使用ls -d /home/alice/Documents/*/
这里是一个使用树的变种,它只在单独的行上输出目录名,是的,它很丑,但是,嘿,它工作。
tree -d | grep -E '^[├|└]' | cut -d ' ' -f2
或者用awk
tree -d | grep -E '^[├|└]' | awk '{print $2}'
然而,这可能更好,并且将保留目录名之后的/。
ls -l | awk '/^d/{print $9}'
有四种方法可以做到这一点,每种方法都有不同的输出格式
1. 使用回声
例如:echo */, echo */*/ 以下是我得到的:
cs/ draft/ files/ hacks/ masters/ static/
cs/code/ files/images/ static/images/ static/stylesheets/
2. 只使用ls
例如:ls -d */ 这就是我得到的答案:
cs/ files/ masters/
draft/ hacks/ static/
或者作为列表(包含详细信息):ls -dl */
3.使用ls和grep
示例:ls -l | grep "^d" 以下是我得到的:
drwxr-xr-x 24 h staff 816 Jun 8 10:55 cs
drwxr-xr-x 6 h staff 204 Jun 8 10:55 draft
drwxr-xr-x 9 h staff 306 Jun 8 10:55 files
drwxr-xr-x 2 h staff 68 Jun 9 13:19 hacks
drwxr-xr-x 6 h staff 204 Jun 8 10:55 masters
drwxr-xr-x 4 h staff 136 Jun 8 10:55 static
4. Bash脚本(不推荐用于包含空格的文件名)
例如:$(ls -d */)中的i;执行echo ${i%%/};完成 以下是我得到的:
cs
draft
files
hacks
masters
static
如果你想用'/'作为结尾字符,命令将是:for i in $(ls -d */);执行echo ${i};完成
cs/
draft/
files/
hacks/
masters/
static/
这是我正在用的
ls -d1 /Directory/Path/*;
实际的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 '(?=/$)'