GNU/Linux >> Linux Esercitazione >  >> Linux

Modo rapido per contare in modo ricorsivo i file in Linux

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'

Linux
  1. Come aumentare il limite del numero di file aperti in Linux

  2. Conteggio ricorsivo dei file in una directory Linux

  3. Come contare il numero di file in ogni directory?

  4. Posso aumentare il numero di inode in Linux?

  5. Modo più veloce per eliminare un gran numero di file

Come copiare un gran numero di file in Linux

Il modo più veloce per contare i file in modo ricorsivo in Linux

Come elencare i file in modo ricorsivo in Linux

Come contare i file nella directory su Linux

Conta il numero di file in una directory in Linux

Come contare il numero di file in una directory in Linux