Unix - Lista todos os diretórios e subdiretórios, exceto diretórios sem arquivos

2

Eu gostaria de listar todos os diretórios e subdiretórios dentro e abaixo do caminho atual. Desde que eu só queria exibir diretórios eu vim com o seguinte comando:

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

Isto imprime por exemplo

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

O problema que tenho agora é que o diretório financeiro está listado. finance não contém arquivos, sim, os sub-diretórios que você vê acima. O que eu quero alcançar é a seguinte saída:

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

Nesta lista, o diretório financeiro não está listado. Portanto, eu preciso do seu adive de como filtrar diretórios que não contenham arquivos (apenas subdiretórios).

    
por ftiaronsem 16.10.2010 / 12:00

2 respostas

4

Aqui está uma maneira: listar todos os arquivos regulares, remover os nomes básicos dos arquivos e remover duplicatas.

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

Se você deseja remover o ./ :

find . -type f | sed -e 's!/[^/]*$!!' -e 's!^\./!!' | sort -u
    
por 16.10.2010 / 12:17
2

Eu considero a instalação da árvore:

  • sudo apt-get install tree

e, em seguida, execute

  • árvore -d / caminho / para / start / dir

para exibir apenas diretórios.

Exemplo:

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