我知道我可以这样做来获取目录名称列表:
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/^\.\///'