我知道
ls -d */
列出当前目录中的所有文件夹为dir1/ dir2/ dir3/
。
是否有可能在 bash 脚本中将文件夹显示为dir1 dir2 dir3
?
答案1
仅获取目录但省略斜杠:
ls -d */ | sed 's#/##'
或者你必须使用类似的find . -type d -maxdepth 1
(但这会引入./
前缀)
答案2
使用find
(这还将摆脱使用时通常会在前面添加的./
或):/path/to/
find
find . -maxdepth 1 -type d -printf '%f\n'
上述命令将包含.
点文件(通常会被隐藏)。要避免所有以点开头的目录(至少使用 GNU find 时):
find . -maxdepth 1 -type d ! -name '.*' -printf '%f\n'
如果您想查看隐藏目录,但又不想要.
,您可以使用(再次,仅在 GNU find 上测试过,与其他版本的 find 相比可能有所不同):
find . -maxdepth 1 -mindepth 1 -type d -printf '%f\n'
纯的bash
:
for f in */; do echo "${f%/}"; done
下面有点作弊,因为它实际上/
用空格替换了(所以在脚本中不是很有用,但如果您想要稍微漂亮一点的输出,您可能会喜欢它):
printf '%s\b \n' */
或者,你可以使用zsh
而不是bash
并利用其glob 限定符:
ls -d *(/)
答案3
您可以使用
ls -d */ | awk -F/ '{print$1}'
它将 ls 输出通过管道传输到 awk,并告诉它考虑 / 作为字段分隔符,并仅打印第一个字段
答案4
简单结合dirname
touch dir{1..3}
ls -d ./dir*
# ./dir1 ./dir2 ./dir3
ls -d ./dir* | xargs -I {} basename {}
# dir1
# dir2
# dir3