使用 find 获取目录名称列表

使用 find 获取目录名称列表

我知道我可以这样做来获取目录名称列表:

find . -type d -maxdepth 1 

输出如下所示:

.
./foo
./bar

我更喜欢没有./.有没有办法让 find 只输出原始名称?

我尝试将列表发送到 stat 来格式化它,但这只会给我相同的结果:

find . -type d -maxdepth 1 -print0 | xargs -0 stat -f '%N'

答案1

对于 GNU,find您可以使用以下-printf选项:

find . -maxdepth 1 -type d -printf '%f\n'

正如 Paweł 在评论中指出的,如果您不想列出当前目录,请添加-mindepth 1,例如:

find . -mindepth 1 -maxdepth 1 -type d -printf '%f\n'

答案2

更新:

更短的替代方案:

 find . -maxdepth 1 -type d | cut -c 3-

会给你名字,每行一个,没有任何斜杠

答案3

使用 GNU find 时,可以使用 -mindepth 来防止 find 匹配当前目录:

find . -type d -maxdepth 1 -mindepth 1

由于您没有递归地执行此操作,因此可以使用 bash glob:

echo */

在 glob 中添加尾随 / 将导致仅匹配目录。

答案4

让我们sed删除这两个字符:

find . -maxdepth 1 -type d | sed -e 's/^\.\///'

相关内容