Solusi 1:
Jika Anda memiliki ini pada sistem file khusus, atau Anda memiliki jumlah overhead file yang stabil, Anda mungkin bisa mendapatkan jumlah yang cukup kasar dari jumlah file dengan melihat jumlah inode dalam sistem file melalui " df -i":
[email protected]:~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75885 60413843 1% /
Pada kotak pengujian saya di atas, saya mengalokasikan 75.885 inode. Namun, inode ini bukan hanya file, tetapi juga direktori. Misalnya:
[email protected]:~# mkdir /tmp/foo
[email protected]:~# df -i /tmp
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75886 60413842 1% /
[email protected]:~# touch /tmp/bar
[email protected]:~# df -i /tmp
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75887 60413841 1% /
CATATAN:Tidak semua sistem file mempertahankan jumlah inode dengan cara yang sama. ext2/3/4 semuanya akan berfungsi, namun btrf selalu melaporkan 0.
Jika Anda harus membedakan file dari direktori, Anda harus menjalankan sistem file dan "stat" masing-masing untuk melihat apakah itu file, direktori, sym-link, dll ... Masalah terbesar di sini bukan menyalurkan semua teks ke "wc", tetapi mencari di antara semua inode dan entri direktori untuk menggabungkan data tersebut.
Selain tabel inode seperti yang ditunjukkan oleh "df -i", sebenarnya tidak ada database tentang berapa banyak file yang ada di bawah direktori tertentu. Namun, jika informasi ini penting bagi Anda, Anda dapat membuat dan memelihara database tersebut dengan membuat program Anda menambah angka saat mereka membuat file di direktori ini dan menguranginya saat dihapus. Jika Anda tidak mengontrol program yang membuatnya, ini bukanlah pilihan.
Solusi 2:
Saya menulis program penghitungan file khusus untuk pertanyaan StackOverflow ini:https://stackoverflow.com/questions/1427032/fast-linux-file-count-for-a-large-number-of-files
Anda dapat menemukan repo GitHub di sini jika Anda ingin menjelajahi, mengunduh, atau berkontribusi:https://github.com/ChristopherSchultz/fast-file-count
Solusi 3:
Jika Anda ingin menghitung secara rekursif jumlah file dalam direktori, locate perintah adalah fastet yang saya tahu, diasumsikan Anda memiliki database terbaru (sudo update database .. dibuat per default melalui pekerjaan chron setiap hari). Namun, Anda dapat mempercepat perintah jika Anda menghindari grep pipa.
Lihat lokasi pria :
-c, --count
Instead of writing file names on standard output, write the number of
matching entries only.
Jadi perintah tercepat adalah:
locate -c -r '/path/to/dir'