如何使用bash命令列出文件夹?


52

有什么方法可以使用bash命令仅列出目录中的文件夹?(因为该ls命令列出了所有文件和文件夹)

Answers:


66

您可以使用:

ls -d -- */

由于所有目录都以结尾/,因此仅列出当前路径中的目录。该-d选项确保只有目录名称都印,而不是它们的内容。


2
ls-* /在下面列出所有目录及其内容
Vins

1
@ 8088 ls -d -- */和之间有什么区别ls -d */
2014年

5
@Louis --通常用于标记选项的结尾,因此,如果文件名为-lls,则不会将其解释为长列表格式选项。
Cristian Ciupitu 2014年

28

Stephen Martin的回复给出了警告,并列出了当前文件夹,因此我建议

find . -mindepth 1 -maxdepth 1 -type d

(这是在Linux上;我无法在POSIX手册页中找到-maxdepth和-mindepth来查找)


1
我知道较老的问题。虽然最初我也很想找到该任务,但我喜欢这种ls -d -- */选择,因为它find也会找到隐藏的目录。这有时可能有用,但有时也会引起麻烦。我希望此评论可以对其他人有所帮助。+1
Matchew

12
find . -maxdepth 1 -type d

将仅列出文件夹。就像Teddy指出的那样,您需要-maxdepth才能阻止它重新存储到sub dirs中


5
您可能也想要-maxdepth 1
泰迪


1

您“不应该”解析ls的输出,或者这样说。我回想一下,其背后的原因是,该输出旨在使人类可读,并且使其解析变得不必要地复杂。

如果您不想使用ls或find,则可以尝试使用“ [-d]”过滤“ *”。

我只是这样做,由于某种原因ls和find无法正常工作(我猜带有空格和方括号的文件名,或者我忽略的其他东西),然后我按照

for f in * ; do [ -d "$f" ] && echo $f is indeed a folder ; done

0

只是为了强调在全局模式选择方面令我困惑的事情;说你有这个:

$ cd /tmp
$ mkdir testglob
$ for ix in {00,01,02,03} ; do mkdir testglob/mydir_${ix} ; done
$ for ix in {00,01,02,03} ; do touch testglob/myfile_${ix} ; done
$ for ix in {00,01,02,03} ; do touch testglob/mydir_${ix}.txt ; done
$ for ix in {00,01,02,03} ; do mkdir testglob/otherdir_${ix} ; done
$ tree testglob/
testglob/
├── mydir_00
├── mydir_00.txt
├── mydir_01
├── mydir_01.txt
├── mydir_02
├── mydir_02.txt
├── mydir_03
├── mydir_03.txt
├── myfile_00
├── myfile_01
├── myfile_02
├── myfile_03
├── otherdir_00
├── otherdir_01
├── otherdir_02
└── otherdir_03

8 directories, 8 files

因此,在这里说您只想选择mydir*目录。请注意,如果您省略了终止斜杠,ls -d还将列出文件:

$ ls -d testglob/mydir*   # also `ls -d -- testglob/mydir*`
testglob/mydir_00      testglob/mydir_01      testglob/mydir_02      testglob/mydir_03
testglob/mydir_00.txt  testglob/mydir_01.txt  testglob/mydir_02.txt  testglob/mydir_03.txt

...但是,以斜杠结尾,则仅列出目录:

$ ls -d testglob/mydir*/   # also `ls -d -- testglob/mydir*/`
testglob/mydir_00/  testglob/mydir_01/  testglob/mydir_02/  testglob/mydir_03/

0

printf "%s\n" */ 将列出$ PWD中的所有目录。

echo */ 也可以使用,但长一行时,如果名称中包含空格,则难度更大。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.