Bagaimana saya bisa menghitung jumlah folder dalam drive menggunakan Linux?


24

Saya perlu mengatur HDD eksternal sehingga tidak ada lebih dari 500 folder di dalamnya. Panel "Properties" Ubuntu hanya menampilkan jumlah file, bukan jumlah folder.

Apakah ada baris perintah sederhana yang akan memberi tahu saya jumlah subdirektori?

Saya perlu menghitung secara rekursif, dan drive adalah HDD eksternal yang dipasang di /media/MUSIC/. Ini untuk sistem stereo mobil yang dokumentasinya mengatakan hanya membaca 500 folder pertama.

Jawaban:


20

Arahkan ke drive Anda dan jalankan

ls -lR | grep ^d | wc -l

Tampaknya ini memberikan angka yang lebih benar daripada jawaban yang saya terima 3 tahun yang lalu. Itu menghitung direktori saya di mana ini dilakukan tidak.
Dean Rather

Saya melihat angka yang berbeda juga, tetapi tidak terlalu berbeda.
SPRBRN

Secara pribadi saya lebih suka yang grep -cover wc -l. Mungkin hanya aku.
Maxim_united

1
Di atas akan menghitung lebih jika entri direktori berisi urutan \nd(di mana \nkarakter NL).
Toby Speight

1
Toby benar, lsoutput tidak seharusnya disalurkan . Selain itu ini akan jauh lebih lambat karena harus mengeluarkan seluruh pohon dan kemudian menjalankan grep melaluinya
phuclv

37

Temukan semua folder secara total, termasuk subdirektori?

find /mount/point -type d | wc -l

... atau temukan semua folder di direktori root (tidak termasuk subdirektori)?

find /mount/point -maxdepth 1 -type d | wc -l

Yang pertama adalah persis apa yang saya cari. Terima kasih!
Dean Rather

@Dean: yeah, saya telah menggunakannya untuk menghitung direktori dalam koleksi musik saya sebelumnya juga. :) untuk hak braggin, hitung MP3 Anda: find / mount / point -type f | grep -i mp3 | wc-l
quack quixote

1
@Dean: yeah, saya tidak tahu sintaks find begitu saja, tetapi saya biasanya menggunakan grep -v untuk itu: find / mount / pt -type f | grep -vi mp3 | grep -vi wav | wc-l ... (dan <i> </i> tidak berfungsi dalam komentar, gunakan *foo*untuk membuat miring: foo )
quack quixote

2
@Dean: saya pikir Anda hanya akan menggunakan find /path -not -iname '*.mp3' | wc -luntuk memfilter MP3, atau untuk menggunakan MP3 dan WAVfind /path -not -iname '*.mp3' -not -iname '*.wav' | wc -l
quack quixote

1
Perlu menambahkan -type f agar bisa mengabaikan folder juga, tapi selamat! Saya baru saja menemukan sejumlah besar file m4a yang saya tidak tahu tentang ... Terima kasih!
Dean Rather

4

Baris baru adalah karakter yang valid dalam nama direktori. Saya sarankan membiarkan findmencetak baris kosong untuk setiap direktori yang ditemukan dan kemudian membiarkan wcmenghitung baris tersebut.

find /mount/point -type d -printf '\n' | wc -l

3

Coba yang berikut ini [lihat di bawah]:

ls -1 -p | grep "/" | wc -l

Ini akan mencetak daftar satu kolom dari direktori saat ini, dengan garis miring untuk item yang merupakan subdirektori, kemudian hitung garis dengan garis miring.

EDIT: Anda mungkin harus pergi dengan jawaban quack quixote, karena ini sedikit lebih eksplisit, tapi saya sudah mengoreksi milik saya (setelah mempertimbangkan saran quack).

ls -Rp | grep "/$" | wc -l

Perlu menambahkan -R untuk menjadi rekursif (maaf karena gagal menyebutkan), dan perlu menentukan path ke ls, tapi ya, ini bekerja: ls -1 -p -R / media / MUSIC / | grep "/" | wc-l Terima kasih!
Dean Rather

Setelah mencoba ini dan saran quixote quack, saya mendapat 2 hasil berbeda ... Saya cenderung percaya yang lain. Bagaimanapun, terima kasih!
Dean Rather

1
Anda tidak perlu -1karena ls akan mendeteksi pipa dan tidak akan memformat kolom. Anda juga dapat mengambil daftar rekursif dengan -R, tetapi kemudian Anda mungkin ingin menerima "/$"hanya mencocokkan garis miring (atau jumlah akan dimatikan). versi final:ls -Rp | grep "/$" | wc -l
quack quixote

1
yang menemukan versi saya diposting akan menghitung .(yaitu /mount/point) di hitung nya, ls versi dalam komentar di atas saya tidak akan. jumlah tersebut berbeda dengan 1, yang dapat Anda gunakan /mount/point/*dalam perintah find untuk memperbaikinya (dengan asumsi tidak ada dot-direktori tersembunyi).
quack quixote

Saya tidak yakin mengapa Anda mendapat dua hasil berbeda, tetapi metode @ quack akan menyertakan direktori "tersembunyi" (mis. yang dimulai dengan '.').
stuntmouse

1

Saya telah menulis ffcnt untuk mempercepat penghitungan file rekursif dalam keadaan tertentu: disk rotasi dan sistem file yang mendukung pemetaan luas.

Ini bisa menjadi urutan besarnya lebih cepat dari lsatau findberdasarkan pendekatan


1

Ketika ada sejumlah besar direktori, alat-alat seperti treemungkin membutuhkan selamanya untuk diselesaikan atau bahkan digantung, jadi Anda mungkin ingin menggunakan sesuatu yang lebih efisien.

Cara paling efisien untuk menghitung direktori yang dapat saya pikirkan adalah sebagai berikut, karena findhanya akan mencetak satu .untuk setiap folder yang ditemukan alih-alih path lengkap dan nama file dan wchanya perlu mengulangi jumlah karakter:

find /mount/point -type d -printf '.' |wc -c

Untuk mengecualikan /mount/pointdirinya dari perhitungan dan hanya menghitung sub direktori:

find /mount/point -mindepth 1 -type d -printf '.' |wc -c

1

Saya menemukan du --inodesbermanfaat, tetapi saya tidak yakin versi mana yang dudibutuhkan. Di Ubuntu 17.10, yang berikut ini berfungsi:

du --inodes      # all files and subdirectories
du --inodes -s   # summary
du --inodes -d 2 # depth 2 at most

Gabungkan dengan | sort -nruntuk mengurutkan menurun berdasarkan jumlah inode yang mengandung.


0

Saya suka menggunakan pohon untuk menarik jumlah direktori

tree -d -R -fi --noreport | wc -l

Atau, gunakan sakit untuk menunjukkan sebagian besar folder berada

find . -type d -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn

Atau sesuatu seperti: pohon | grep -e '^. * direktori,'
mindcrime

-2

Untuk menemukan jumlah folder dan direktori di direktori saat ini

Ketikkan perintah berikut di terminal Anda

echo */ | wc
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.