我想只列出指定路径中的目录(ls没有这样的选项)。 另外,这可以用单行命令完成吗?
当前回答
### If you need full path of dir and list selective dir with "name" of dir(or dir_prefix*):
find $(pwd) -maxdepth 1 -type d -name "SL*"
其他回答
可以使用ls -d */或tree -d
另一种解决方案是通配符,但这取决于您正在使用的shell以及是否支持目录通配符。
例如ZSH:
zsh # ls *(/)
下面是另一个显示链接目录的解决方案。 我稍微喜欢它,因为它是“正常”ls -l输出的子集:
ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always
为了列出当前工作目录中的目录 Ls -d */可以使用。 如果需要列出隐藏目录,则使用此命令 Ls -d .*/
对于Bash脚本,我通常会尝试以一种不执行任何外部程序的方式来执行(grep, sed, ls,…)
for i in * ; do
if [[ -d "$i" ]] ; then
echo "$i"
fi
done
或者作为一条紧凑的直线
for i in * ; do [[ -d "$i" ]] && echo "$i" ; done
如果我需要重用目录列表,我通常会把它放在一个数组中:
DIRS=() ; for i in * ; do [[ -d "$i" ]] && DIRS+=("$i") ; done
然后使用"${DIRS[*]}"或"${DIRS[@]}"展开数组,如
for dir in "${DIRS[@]}" ; do
echo "Do something with directory $dir"
done
这种方法的另一个好处是它非常健壮。它可以处理目录名称中的空格和换行符。
这是大多数人想要的答案。
ls -l | grep -E '^d' | awk '{print $9}'
目录名,除了目录名什么都没有。