如何在没有尾随 / 的情况下列出 bash 中的文件夹

Wya*_*ker 3 linux bash path

我知道

ls -d */
Run Code Online (Sandbox Code Playgroud)

将当前目录中的所有文件夹列为dir1/ dir2/ dir3/.

bash 脚本中是否有可能将文件夹显示为dir1 dir2 dir3

evi*_*oup 6

使用find(这也将摆脱使用时通常会预先添加的./or ):/path/to/find

find . -maxdepth 1 -type d -printf '%f\n'
Run Code Online (Sandbox Code Playgroud)

上面的命令将包括.dotfiles(通常是隐藏的)。为了避免所有以点开头的目录(至少对于 GNU find):

find . -maxdepth 1 -type d ! -name '.*' -printf '%f\n'
Run Code Online (Sandbox Code Playgroud)

如果您想查看隐藏目录,但又不想.,您可以使用(同样,仅在 GNU find、YMMV 和其他版本的 find 上测试过):

find . -maxdepth 1 -mindepth 1 -type d -printf '%f\n'
Run Code Online (Sandbox Code Playgroud)

bash:

for f in */; do echo "${f%/}"; done
Run Code Online (Sandbox Code Playgroud)

以下是一些作弊,因为它实际上用/空格替换了(所以在脚本中不是很有用,但如果你想要的只是更漂亮的输出,你可能会喜欢它):

printf '%s\b \n' */
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用zsh代替bash并利用其全局限定符

ls -d *(/)
Run Code Online (Sandbox Code Playgroud)


小智 5

只获取目录但省略斜杠:

ls -d */ | sed 's#/##'
Run Code Online (Sandbox Code Playgroud)

或者你必须使用类似的东西find . -type d -maxdepth 1(但这引入了./前缀)