在Bash中相对于父目录仅列出文件夹(ls -d)

4

我发现这个命令在当前文件夹中可以正常工作:

ls -d */ -1

但是当我想要列出不在该文件夹中的文件夹时(例如,我想要列出只位于1或2个级别更高的父文件夹或祖父文件夹中的文件夹),我该如何获得相同的结果?


ls -d */*/ 是一个有效的命令(尽管希望您不要试图以编程方式使用其输出;请参见 http://mywiki.wooledge.org/ParsingLs)。 - Charles Duffy
我本意是从父文件夹中执行ls命令。 - Volodymyr
2
(cd .. && exec ls -d */)?(exec通过消耗子shell来避免fork的开销,从而平衡创建子shell的成本。) - Charles Duffy
如果您只想迭代兄弟目录,则根本不需要使用ls,也不应该使用它。可以使用for dir in ../*/; do ...来实现。 - Charles Duffy
我认为(cd /dir && exec ls -d */)是目前最好的选择。谢谢。 - Volodymyr
很高兴能帮忙。我没有将其添加为答案,因为老实说,我非常喜欢Tom的答案;如果有具体原因它对您不起作用(例如,如果您不想在输出中添加“../”),您可以在答案下方加上评论,因为这些问题可以通过稍微不同的“查找”调用来解决。 - Charles Duffy
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
6
听起来你正在寻找find命令,并使用-type d参数限制结果为目录:
find .. -type d
你可以使用..从父目录开始。 根据你的find版本,你可以使用-mindepth-maxdepth来限制结果:
find .. -mindepth 1 -maxdepth 2 -type d

-mindepth-maxdepth放在前面不是惯例吗?(就像其他全局过滤器一样,而不仅仅应用于给定位置) - Charles Duffy
我不知道那个惯例,但它似乎是合理的,我会进行编辑。 - Tom Fenech
1
一些版本的GNU find如果在其他位置被发现,会在stderr上发出警告;我不确定这种行为是何时开始或停止的。 - Charles Duffy
顺便提一下,从问题的评论中看来,似乎原帖作者说“更高”时是有意义的(想要查找包含在父目录或祖父目录中的目录)。 - Charles Duffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,