Soluzione 1:
Se hai questo su un file system dedicato, o hai un numero costante di file in testa, potresti essere in grado di ottenere un conteggio abbastanza approssimativo del numero di file osservando il numero di inode nel file system tramite " df -i":
[email protected]:~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75885 60413843 1% /
Nella mia casella di test sopra ho allocato 75.885 inode. Tuttavia, questi inode non sono solo file, sono anche directory. Ad esempio:
[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% /
NOTA:non tutti i file system mantengono i conteggi degli inode allo stesso modo. ext2/3/4 funzioneranno tutti, tuttavia btrfs riporta sempre 0.
Se devi differenziare i file dalle directory, dovrai percorrere il file system e "stat" ciascuno per vedere se si tratta di un file, directory, collegamento simbolico, ecc ... Il problema più grande qui non è il piping di tutto il testo in "wc", ma cercando tra tutti gli inode e le voci di directory per mettere insieme quei dati.
Oltre alla tabella degli inode come mostrato da "df -i", non esiste davvero un database di quanti file ci sono in una determinata directory. Tuttavia, se queste informazioni sono importanti per te, puoi creare e mantenere un tale database facendo in modo che i tuoi programmi incrementino un numero quando creano un file in questa directory e lo decrementino quando vengono cancellati. Se non controlli i programmi che li creano, questa non è un'opzione.
Soluzione 2:
Ho scritto un programma personalizzato per il conteggio dei file per questa domanda di StackOverflow:https://stackoverflow.com/questions/1427032/fast-linux-file-count-for-a-large-number-of-files
Puoi trovare il repository GitHub qui se desideri navigare, scaricare o contribuire:https://github.com/ChristopherSchultz/fast-file-count
Soluzione 3:
Se vuoi contare in modo ricorsivo il numero di file in una directory, locate il comando è quello più veloce che conosco, supponendo che tu abbia un database aggiornato (sudo database di aggiornamento .. creato per impostazione predefinita tramite chron job ogni giorno). Tuttavia, puoi velocizzare il comando se eviti grep tubo.
Vedi man locate :
-c, --count
Instead of writing file names on standard output, write the number of
matching entries only.
Quindi il comando più veloce è:
locate -c -r '/path/to/dir'