GNU/Linux >> LINUX-Kenntnisse >  >> Linux

du zählt eher die Anzahl der Dateien/Verzeichnisse als die Größe

Ich habe du --inodes gefunden nützlich, aber ich bin mir nicht sicher, welche Version von du Es benötigt. Unter Ubuntu 17.10 funktioniert Folgendes:

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

Kombinieren Sie mit | sort -nr absteigend nach der Anzahl enthaltener Inodes zu sortieren.


Der einfachste Weg scheint find /path/to/search -ls | wc -l zu sein

Find wird verwendet, um durch alle Dateien und Ordner zu gehen.
-ls um alle Namen aufzulisten (zu drucken). Dies ist eine Standardeinstellung und wenn Sie es weglassen, funktioniert es immer noch auf fast allen Systemen gleich. (Fast, da einige möglicherweise andere Standardeinstellungen haben). Es ist jedoch eine gute Angewohnheit, dies ausdrücklich zu verwenden.

Wenn Sie einfach den find /path/to/search -ls verwenden teilweise werden alle Dateien und Verzeichnisse auf Ihrem Bildschirm ausgegeben.


wc ist Wortzahl. die -l Option teilt ihm mit, die Anzahl der Zeilen zu zählen.

Sie können es auf verschiedene Arten verwenden, z. B.

  • WC-Testdatei
  • Katzentestdatei | WC

Die erste Option lässt wc eine Datei öffnen und die Anzahl der Zeilen, Wörter und Zeichen in dieser Datei zählen. Die zweite Option macht dasselbe, aber ohne Dateinamen liest sie von stdin.


Sie können Befehle mit einer Pipe | kombinieren . Die Ausgabe des ersten Befehls wird an die Eingabe des zweiten Befehls weitergeleitet. Also find /path/to/search -ls | wc -l verwendet find, um alle Dateien und Verzeichnisse aufzulisten und speist die Ausgabe an wc. Wc zählt dann die Anzahl der Zeilen.

(Eine andere Alternative wäre `ls | wc' gewesen, aber find ist viel flexibler und ein gutes Werkzeug zum Lernen.)

[Nach Kommentar bearbeiten]

Es könnte nützlich sein, find und exec.

zu kombinieren

Z.B. find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \; listet alle Verzeichnisse in / auf, abgesehen von einigen, die Sie nicht durchsuchen möchten. Wir können den vorherigen Befehl auf jedem von ihnen auslösen, was eine Summe von Dateien pro Ordner in /.

ergibt

Allerdings:

  1. Dies verwendet die GNU-spezifische Erweiterung -maxdepth.
    Es funktioniert unter Linux, aber nicht auf jedem beliebigen Unix.
  2. Ich vermute, Sie möchten vielleicht eine Reihe von Dateien für jedes einzelne Unterverzeichnis.

Das folgende PHP-Skript macht es möglich.

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

Legen Sie das in eine Datei (z. B. "treesize "), chmod +x es und führen Sie es mit ./treesize . | sort -rn | less aus .


Linux
  1. Finden Sie Dateien und Verzeichnisse in Linux wie ein Profi

  2. So finden Sie unter Linux Dateien, die größer oder kleiner als X sind

  3. Finden Sie die größten Dateien und Verzeichnisse in Linux

  4. Eine große Anzahl von XML-Dateien neu formatieren?

  5. Alle .sh-Dateien mit einer Größe von mehr als 5 KB anzeigen?

So finden Sie die Anzahl der Dateien in einem Verzeichnis und Unterverzeichnissen

Find-Befehl in Linux (Dateien und Verzeichnisse suchen)

Finden Sie Dateien und Verzeichnisse unter Linux ganz einfach

Verzeichnisse mit allen Dateien finden, die älter als X sind?

Schnellere Möglichkeit, eine große Anzahl von Dateien zu löschen

wie du du verwendest, um Dateien anzuzeigen, die eine Schwellenwertgröße überschreiten