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

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

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

find -type d -exec ls -d1 {} \; | cut -c 3-

例如打印出来

webphone
music
finance
finance/banking
finance/realestate
finance/trading
finance/other
finance/moneylending
finance/insurance
webradio
webtv

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

webphone
music
finance/banking
finance/realestate
finance/trading
finance/other
finance/moneylending
finance/insurance
webradio
webtv

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

答案1

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

find . -type f | sed 's!/[^/]*$!!' | sort -u

如果你想去掉前导./

find . -type f | sed -e 's!/[^/]*$!!' -e 's!^\./!!' | sort -u

答案2

我考虑安装树:

  • sudo apt-get 安装树

然后运行

  • tree -d /路径/到/起始/目录

仅显示目录。

例子:

root@X100e:~# tree -d /var/cache/
/var/cache/
├── apache2
│   └── mod_disk_cache
├── apt
│   └── archives
│       └── partial
├── binfmts
├── cups
│   └── rss
├── debconf
├── dictionaries-common
├── flashplugin-installer
...

答案3

find有一个-empty可以直接使用的选项

find . -type d ! -empty

相关内容