我知道我可以这样做来获取目录名称列表:
find . -type d -maxdepth 1
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
.
./foo
./bar
Run Code Online (Sandbox Code Playgroud)
我更喜欢没有./
. 有没有办法让 find 只输出原始名称?
我尝试将列表发送到 stat 以对其进行格式化,但这只是给了我相同的结果:
find . -type d -maxdepth 1 -print0 | xargs -0 stat -f '%N'
Run Code Online (Sandbox Code Playgroud)
Tho*_*hor 54
使用 GNU,find
您可以使用以下-printf
选项:
find . -maxdepth 1 -type d -printf '%f\n'
Run Code Online (Sandbox Code Playgroud)
正如帕维所指出的那样?在评论中,如果您不想列出当前目录,请添加-mindepth 1
,例如:
find . -mindepth 1 -maxdepth 1 -type d -printf '%f\n'
Run Code Online (Sandbox Code Playgroud)
Lev*_*von 22
更新:
更短的替代方案:
find . -maxdepth 1 -type d | cut -c 3-
Run Code Online (Sandbox Code Playgroud)
会给你名字,每行一个,没有任何斜线
使用 GNU find,您可以使用 -mindepth 来防止 find 匹配当前目录:
find . -type d -maxdepth 1 -mindepth 1
Run Code Online (Sandbox Code Playgroud)
由于您不是递归地执行此操作,因此可以使用 bash glob:
echo */
Run Code Online (Sandbox Code Playgroud)
向 glob 添加尾随 / 将导致仅匹配目录。
小智 8
我宁愿使用:
find ./ -type d -maxdepth 1 -exec basename {} \;
Run Code Online (Sandbox Code Playgroud)
让我们sed
删除这两个字符:
find . -maxdepth 1 -type d | sed -e 's/^\.\///'
Run Code Online (Sandbox Code Playgroud)