列出所有目录和子目录,不包括没有文件的目录

fti*_*sem 2 linux unix command-line ls directory-listing

我想列出当前路径中和下方的所有目录和子目录。由于我只想显示目录,我想出了以下命令:

find -type d -exec ls -d1 {} \; | cut -c 3-
Run Code Online (Sandbox Code Playgroud)

例如,这会打印出来

webphone
music
finance
finance/banking
finance/realestate
finance/trading
finance/other
finance/moneylending
finance/insurance
webradio
webtv
Run Code Online (Sandbox Code Playgroud)

我现在遇到的问题是,该目录finance已列出。finance不包含任何文件,只包含您在上面看到的子目录。我想要实现的是以下输出:

webphone
music
finance/banking
finance/realestate
finance/trading
finance/other
finance/moneylending
finance/insurance
webradio
webtv
Run Code Online (Sandbox Code Playgroud)

在此列表finance中未列出目录。因此,我需要您提供有关如何过滤不包含文件(仅包含子目录)的目录的建议。

Gil*_*il' 5

这是一种方法:列出所有常规文件,去除文件基本名称,并删除重复项。

find . -type f | sed 's!/[^/]*$!!' | sort -u
Run Code Online (Sandbox Code Playgroud)

如果你想剥离领先./

find . -type f | sed -e 's!/[^/]*$!!' -e 's!^\./!!' | sort -u
Run Code Online (Sandbox Code Playgroud)