Saya ingin melihat berapa banyak file dalam subdirektori untuk mencari tahu di mana semua penggunaan inode pada sistem. Sepertinya saya akan melakukan ini untuk penggunaan ruang
du -sh /*
yang akan memberi saya ruang yang digunakan dalam direktori dari root, tetapi dalam hal ini saya ingin jumlah file, bukan ukurannya.
disk-usage
recursive
inode
xenoterracide
sumber
sumber
du -sh /*
membuatnya cukup jelas bagaimana saya ingin hitungan bekerja. hal yang sama, hitung saja file bukan byte.Jawaban:
Berkat Gilles dan xenoterracide untuk perbaikan keamanan / kompatibilitas.
Bagian pertama:
find -maxdepth 1 -type d
akan mengembalikan daftar semua direktori di direktori kerja saat ini. Ini disalurkan ke ...Bagian kedua:
while read -r dir; do
memulai loop sementara - selama pipa yang masuk ke saat terbuka (yang sampai seluruh daftar direktori dikirim), perintah baca akan menempatkan baris berikutnya ke dalam variabel "dir". Lalu itu berlanjut ...Bagian ketiga:
printf "%s:\t" "$dir";
akan mencetak string dalam "$ dir" (yang memegang salah satu nama direktori) diikuti oleh tab.Bagian keempat:
find "$dir -f file"
membuat daftar semua file di dalam nama direktori yang disimpan dalam "$ dir". Daftar ini dikirim ke ..Bagian kelima:
wc -l;
menghitung jumlah baris yang dikirim ke input standarnya.Bagian terakhir:
done
cukup akhiri loop sementara.Jadi kami mendapatkan daftar semua direktori di direktori saat ini. Untuk masing-masing direktori tersebut, kami membuat daftar semua file di dalamnya sehingga kami dapat menghitung semuanya menggunakan
wc -l
. Hasilnya akan terlihat seperti:sumber
read -r
sebagairead
backslashes memperlakukan polos khusus. Kemudianecho -en "$dir:\t"
akan kembali memotong backslash; perbaikan sederhana adalah menggunakanprintf '%s:\t' "$dir"
sebagai gantinya. Selanjutnya,$dir
harus"$dir"
( selalu menggunakan tanda kutip ganda di sekitar substitusi variabel ).find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" | wc -l; done
sort -n -r -k2
di akhir ini, untuk banyak direktori, sehingga saya tahu di mana penggunaan terbanyak-type f
untuk membuatnya daftar file:find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
Coba
find . -type f | wc -l
, ini akan menghitung semua file dalam direktori saat ini serta semua file dalam subdirektori. Perhatikan bahwa semua direktori tidak akan dihitung sebagai file, hanya file biasa yang melakukannya.sumber
Berikut adalah kompilasi dari beberapa perintah daftar yang berguna (di-hash ulang berdasarkan kode pengguna sebelumnya):
Daftar folder dengan jumlah file:
Daftar folder dengan jumlah file non-nol:
Daftar folder dengan jumlah sub-folder:
Daftar folder dengan jumlah sub-folder bukan nol:
Daftar folder kosong:
Daftar folder yang tidak kosong dengan jumlah konten:
sumber
Mencoba:
sebagai titik awal, atau jika Anda benar-benar hanya ingin mengulang melalui subdirektori direktori (dan lewati file di direktori tingkat atas itu)
sumber
find
bekerja secara rekursif melalui semua sub direktori secara default. Jika Anda ingin itu berfungsi di banyak lokasi, Anda bisa menentukan semuanya di antarafind
dan-type
.698035
. Saya harus melihat sekitar 6 angka./home
? Saya akan 100% yakin Anda tidak.Solusi berikut menghitung jumlah sebenarnya dari inode yang digunakan mulai dari direktori saat ini:
Untuk mendapatkan jumlah file dari subset yang sama, gunakan:
Untuk solusi yang menjelajahi hanya subdirektori, tanpa memperhitungkan file akun di direktori saat ini, Anda dapat merujuk ke jawaban lain.
sumber
find -printf '%i\n' | sort -u | wc -l
. Jika Anda ingin portabel, Anda akan perlufind . -exec ls -id {} + | cut …
.OS X 10.6 mencekik perintah dalam jawaban yang diterima, karena tidak menentukan jalur untuk
find
. Alih-alih gunakan:sumber
Saya tahu saya terlambat ke pesta, tetapi saya percaya
bash
solusi murni ini (atau cangkang lain yang menerima gumpalan bintang ganda) bisa jauh lebih cepat dalam beberapa situasi:keluaran:
sumber
Cobalah ini:
Seharusnya berfungsi dengan baik kecuali nama file menyertakan baris baru.
sumber
-maxdepth 1
segera setelah yang pertamafind
. Jika Anda ingin memasukkan jumlah subdirektori dalam hitungan Anda, hapus bagian-type f
akhir (yang seharusnya benar-benar ada! -type d
, sehingga semua file non-direktori akan dimasukkan).Jika Anda telah
ncdu
menginstal (yang harus dimiliki ketika Anda ingin melakukan pembersihan), cukup ketikc
untuk "Beralih tampilan jumlah item anak". DanC
untuk "Urutkan berdasarkan item".sumber
du --inode
Saya tidak yakin mengapa tidak ada orang (termasuk saya) yang menyadari:
Saya cukup yakin ini memecahkan masalah OP. Saya sudah mulai sering menggunakannya untuk mencari tahu di mana semua sampah di drive saya yang besar (dan menurunkannya ke disk yang lebih tua).
Info lebih lanjut
Jika Anda TIDAK ingin berulang (yang dapat berguna dalam situasi lain), tambahkan
sumber