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.

Dean Sebaliknya
sumber

Jawaban:

20

Arahkan ke drive Anda dan jalankan

ls -lR | grep ^d | wc -l
Aniket Thakur
sumber
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
quack quixote
sumber
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
Erik Sjölund
sumber
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
stuntmouse
sumber
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

the8472
sumber
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
David
sumber
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.

krlmlr
sumber
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
Cameron L.
sumber
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
ASHISH RANJAN
sumber