GNU/Linux >> Znalost Linux >  >> Linux

du, který počítá spíše počet souborů/adresářů než velikost

Našel jsem du --inodes užitečné, ale nejsem si jistý, která verze du to vyžaduje. Na Ubuntu 17.10 funguje následující:

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

Zkombinujte s | sort -nr seřadit sestupně podle počtu obsahujících inodů.


Nejjednodušší způsob se zdá být find /path/to/search -ls | wc -l

Najít se používá k procházení všemi soubory a složkami.
-ls vypsat (vytisknout) všechna jména. Toto je výchozí nastavení a pokud jej vynecháte, bude stále fungovat stejně téměř ve všech systémech. (Téměř, protože některé mohou mít jiné výchozí hodnoty). Je však dobrým zvykem toto výslovně používat.

Pokud použijete pouze find /path/to/search -ls část vytiskne všechny soubory a adresáře na vaši obrazovku.


wc je počet slov. -l volba mu říká, že má počítat počet řádků.

Můžete jej použít několika způsoby, např.

  • testovací soubor wc
  • testovací soubor kočky | wc

První možnost umožňuje wc otevřít soubor a spočítat počet řádků, slov a znaků v tomto souboru. Druhá možnost dělá totéž, ale bez názvu souboru čte ze stdin.


Příkazy můžete kombinovat s čárou | . Výstup z prvního příkazu bude přesměrován na vstup druhého příkazu. Tedy find /path/to/search -ls | wc -l používá find k vypsání všech souborů a adresářů a posílá výstup do wc. Wc pak spočítá počet řádků.

(Další alternativou by bylo `ls | wc', ale find je mnohem flexibilnější a dobrý nástroj k učení.)

[Upravit po komentáři]

Může být užitečné zkombinovat find a exec.

Např. find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \; zobrazí seznam všech adresářů v /, zakáže některé, které nechcete prohledávat. Na každém z nich můžeme spustit předchozí příkaz, čímž získáme součet souborů na složku v /.

Nicméně:

  1. Toto používá GNU specifické rozšíření -maxdepth.
    Bude fungovat na Linuxu, ale ne na jakémkoli unixu.
  2. Předpokládám, že byste ve skutečnosti mohli chtít určitý počet souborů pro každý podadresář.

Následující PHP skript to udělá.

#!/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']);
}

Vložte to do souboru (řekněme „treesize "), chmod +x a spusťte jej pomocí ./treesize . | sort -rn | less .


Linux
  1. Najít největší soubory nebo adresáře?

  2. Jak hledat soubory podle velikosti a přípony?

  3. Zobrazují se všechny soubory „.sh“ o velikosti větší než 5 kb?

  1. Jak zjistit počet souborů v adresáři a podadresářích

  2. Přeformátování velkého počtu souborů XML?

  3. Najít adresáře se všemi soubory staršími než X?

  1. Jak najít všechny soubory větší než 1 GB v Linuxu?

  2. Maximální počet souborů/adresářů na Linuxu?

  3. Jak spočítat počet souborů v každém adresáři?