Pertanyaan Unix - Daftar semua direktori dan subdirektori, kecuali direktori tanpa file


Saya ingin mendaftar semua direktori dan sub direktori di dalam dan di bawah jalur saat ini. Karena saya hanya ingin menampilkan direktori, saya datang dengan perintah follwing:

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

Ini mencetak misalnya

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

Masalah yang saya miliki saat ini adalah, bahwa keuangan direktori terdaftar. keuangan tidak berisi file yang menarik sub direktori yang Anda lihat di atas. Yang ingin saya capai adalah output berikut:

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

Dalam daftar ini, keuangan direktori tidak terdaftar. Oleh karena itu saya perlu adive Anda tentang bagaimana menyaring direktori yang tidak berisi file (hanya subdirektori).


2
2017-10-16 10:00


asal




Jawaban:


Berikut ini satu cara: daftarkan semua file biasa, hapus basename file, dan hapus duplikat.

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

Jika Anda ingin menghapus yang terdepan ./:

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

4
2017-10-16 10:17



Terima kasih banyak! Pencarian reg-exp Anda hampir sempurna. Saya hanya harus menghapus "./" dan menghapus baris emtpy pertama. Perintah yang saya jalankan sekarang adalah: temukan. -type f | sed s! / [^ /] * $ !! ' | sort -u | sed '1d' | cut -c 3- - ftiaronsem
@ftiaronsem: baris kosong sesuai dengan direktori saat ini. Lihat edit saya. - Gilles


Saya menganggap memasang pohon:

  • sudo apt-get install tree

lalu jalankan

  • pohon -d / path / ke / start / dir

untuk menampilkan direktori saja.

Contoh:

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

2
2017-10-16 10:13