it-swarm-ja.com

ファイルのないディレクトリを除く、すべてのディレクトリとサブディレクトリを一覧表示します

現在のパス内およびその下にあるすべてのディレクトリとサブディレクトリを一覧表示したいと思います。ディレクトリを表示したかっただけなので、次のコマンドを思いつきました。

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はリストされていません。したがって、ファイルを含まない(サブディレクトリのみ)ディレクトリをフィルタリングする方法についてのアドバイスが必要です。

2
ftiaronsem

1つの方法は、すべての通常のファイルを一覧表示し、ファイルのベース名を取り除き、重複を削除することです。

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

先頭の./を削除する場合:

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

ツリーのインストールを検討します。

  • Sudoapt-getインストールツリー

その後、実行します

  • ツリー-d/path/to/start/dir

ディレクトリのみを表示します。

例:

[email protected]:~# tree -d /var/cache/
/var/cache/
├── Apache2
│   └── mod_disk_cache
├── apt
│   └── archives
│       └── partial
├── binfmts
├── cups
│   └── rss
├── debconf
├── dictionaries-common
├── flashplugin-installer
...
2
udo

find には-empty直接使用できるオプション

find . -type d ! -empty
0
phuclv