Answers:
您可以使用:
ls -d -- */
由于所有目录都以结尾/
,因此仅列出当前路径中的目录。该-d选项确保只有目录名称都印,而不是它们的内容。
ls -d -- */
和之间有什么区别ls -d */
?
--
通常用于标记选项的结尾,因此,如果文件名为-l
ls,则不会将其解释为长列表格式选项。
丹尼尔的答案是正确的。不过,这里有一些有用的补充。
为避免列出隐藏的文件夹(如.git
),请尝试以下操作:
find . -mindepth 1 -maxdepth 1 -type d \( ! -iname ".*" \)
并在某些环境中替换输出开头的可怕的点斜杠find
,请使用以下命令:
find . -mindepth 1 -maxdepth 1 -type d \( ! -iname ".*" \) | sed 's|^\./||g'
您“不应该”解析ls的输出,或者这样说。我回想一下,其背后的原因是,该输出旨在使人类可读,并且使其解析变得不必要地复杂。
如果您不想使用ls或find,则可以尝试使用“ [-d]”过滤“ *”。
我只是这样做,由于某种原因ls和find无法正常工作(我猜带有空格和方括号的文件名,或者我忽略的其他东西),然后我按照
for f in * ; do [ -d "$f" ] && echo $f is indeed a folder ; done
只是为了强调在全局模式选择方面令我困惑的事情;说你有这个:
$ 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/
printf "%s\n" */
将列出$ PWD中的所有目录。
echo */
也可以使用,但长一行时,如果名称中包含空格,则难度更大。
您还可以使用:
du
要么:
git ls-tree -d -r --name-only @