我想列出当前路径下的所有目录和子目录。由于我只想显示目录,所以我想出了以下命令:
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