GNU/Linux >> Linux Esercitazione >  >> Linux

du che conta il numero di file/directory piuttosto che la dimensione

Ho trovato du --inodes utile, ma non sono sicuro di quale versione di du richiede. Su Ubuntu 17.10, funziona quanto segue:

du --inodes      # all files and subdirectories
du --inodes -s   # summary
du --inodes -d 2 # depth 2 at most

Combina con | sort -nr per ordinare in modo decrescente in base al numero di inode contenenti.


Il modo più semplice sembra essere find /path/to/search -ls | wc -l

Find viene utilizzato per esplorare tutti i file e le cartelle.
-ls elencare (stampare) tutti i nomi. Questa è un'impostazione predefinita e se la lasci fuori funzionerà comunque allo stesso modo su quasi tutti i sistemi. (Quasi, dal momento che alcuni potrebbero avere impostazioni predefinite diverse). Tuttavia, è una buona abitudine usarla esplicitamente.

Se usi solo il find /path/to/search -ls parte stamperà tutti i file e le directory sullo schermo.


wc è il conteggio delle parole. il -l l'opzione gli dice di contare il numero di linee.

Puoi usarlo in diversi modi, ad esempio

  • file di prova wc
  • file di prova gatto | wc

La prima opzione consente a wc di aprire un file e contare il numero di righe, parole e caratteri in quel file. La seconda opzione fa lo stesso ma senza nome file legge da stdin.


Puoi combinare i comandi con una pipe | . L'output del primo comando verrà reindirizzato all'input del secondo comando. Quindi find /path/to/search -ls | wc -l usa find per elencare tutti i file e la directory e invia l'output a wc. Wc quindi conta il numero di linee.

(Un'altra alternativa sarebbe stata `ls | wc', ma find è molto più flessibile e un buon strumento per imparare.)

[Modifica dopo il commento]

Potrebbe essere utile combinare find ed exec.

Per esempio. find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \; elencherà tutte le directory in /, tranne alcune in cui non vuoi cercare. Possiamo attivare il comando precedente su ciascuno di essi, ottenendo una somma di file per cartella in /.

Tuttavia:

  1. Questo usa l'estensione specifica GNU -maxdepth.
    Funzionerà su Linux, ma non su qualsiasi unix-a-alike.
  2. Sospetto che tu possa effettivamente volere un numero di file per ogni sottodirectory.

Il seguente script PHP fa il trucco.

#!/usr/bin/php
<?php 

function do_scan($dir, $dev) {
  $total = 1;

  if (\filetype($dir) === 'dir' && \lstat($dir)['dev'] == $dev) {
    foreach (\scandir($dir) as $file) {
      if ($file !== '.' && $file !== '..') {
        $total += do_scan($dir . \DIRECTORY_SEPARATOR . $file, $dev);
      }
    }

    print "$total\t$dir\n";
  }

  return $total;
};

foreach (\array_slice($argv, 1) as $arg) {
  do_scan($arg, \lstat($arg)['dev']);
}

Mettilo in un file (ad esempio, "treesize "), chmod +x ed eseguilo con ./treesize . | sort -rn | less .


Linux
  1. Come trovare file più grandi o più piccoli di X in Linux

  2. Riformattare un gran numero di file XML?

  3. Visualizzazione di tutti i file ".sh" con dimensioni superiori a 5kb?

  4. Come trovare tutti i file di dimensioni superiori a 1 GB in Linux?

  5. trova i file che hanno un numero nel nome del file maggiore di

Trova comando in Linux (Trova file e directory)

Trova facilmente file e directory su Linux

Numero massimo di file/directory su Linux?

Come contare il numero di file in ogni directory?

Trova directory con tutti i file all'interno più vecchi di X?

come usare du per vedere i file più grandi di una dimensione di soglia