Shell: Verzeichnisse nach Dateianzahl sortiert auflisten (einschließlich in Unterverzeichnissen)

7

Ich habe fast mein Limit für die zulässige Anzahl von Dateien in meinem Linux-Home-Verzeichnis erreicht, und ich bin neugierig, wo alle Dateien sind.

In irgendeinem Verzeichnis kann ich zum Beispiel find . -type f | wc -l verwenden, um die Anzahl der Dateien in diesem Verzeichnis und seinen Unterverzeichnissen anzuzeigen, aber ich möchte eine vollständige Liste aller Unterverzeichnisse erstellen können ( und Unter-Unterverzeichnisse usw.), jedes mit einer Zählung aller darin enthaltenen Dateien und seinen Unterverzeichnissen - wenn möglich nach Anzahl sortiert, absteigend.

ZB wenn meine Dateistruktur so aussieht:

%Vor%

Die Ausgabe würde etwa so aussehen:

%Vor%

Irgendwelche Vorschläge sehr geschätzt. (Auch eine kurze Erklärung der Antwort, damit ich daraus lernen kann!). Danke.

    
Richard Inglis 02.08.2011, 20:17
quelle

7 Antworten

3
%Vor%

erzeugt

%Vor%     
glenn jackman 02.08.2011, 21:15
quelle
18

Ich benutze den folgenden Befehl

find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

Was erzeugt etwas wie:

%Vor%     
ajtrichards 13.01.2014 16:23
quelle
7

Das sollte funktionieren:

%Vor%

Erklärung: Im obigen Befehl wird "find ~ -type d" ausgeführt, um alle Unterverzeichnisse des Home-Verzeichnisses zu finden. Für jeden von ihnen wird ein kleines Shell-Skript ausgeführt, das die Gesamtzahl der Dateien in diesem Unterverzeichnis (mit dem Befehl "find $ dir -type f | wc -l", den Sie bereits kennen) findet und die Nummer zurückgibt gefolgt vom Verzeichnisnamen. Der Sortierbefehl wird ausgeführt, um nach der Gesamtanzahl der Dateien in absteigender Reihenfolge zu sortieren.

Dies ist nicht die effizienteste Lösung (Sie scannen das gleiche Verzeichnis oft), aber ich bin mir nicht sicher, ob Sie mit einem einzigen Liner viel besser machen können: -)

    
sagi 02.08.2011 20:31
quelle
3

einfacher und effizienter:

%Vor%     
wjb 20.08.2013 08:29
quelle
1
%Vor%

Das ist ziemlich effizient.

Die Anzahl wird in aufsteigender Reihenfolge angezeigt (d. h. am größten am Ende). Um es in absteigender Reihenfolge zu erhalten, fügen Sie die Option "-r" zum Sortieren hinzu.

Wenn Sie diesen Befehl im Verzeichnis "/" ausführen, durchsucht er das gesamte Dateisystem und teilt Ihnen mit, welche Verzeichnisse die meisten Dateien und Unterverzeichnisse enthalten. Es ist eine gute Möglichkeit zu sehen, wo alle Ihre Inodes verwendet werden.

Hinweis: Dies funktioniert nicht für Verzeichnisse, die Leerzeichen enthalten, aber Sie könnten es ändern, um in diesem Fall zu arbeiten, wenn es ein Problem für Sie ist.

    
loupiote 14.06.2015 21:16
quelle
1

Siehe folgendes Beispiel: Sortierung nach Spalte 2 in umgekehrter Reihenfolge. Verwende sort -k 2 -r . -k 2 bedeutet sortieren mit Spalte 2 (Leerzeichen getrennt), -r bedeutet rückwärts.

%Vor%     
osexp2003 06.06.2017 07:08
quelle
-1

Wenn Sie jedoch mit der nicht kumulativen Lösung mit dirname (siehe Antwort von wjb) einverstanden sind, dann ist weitaus effizienter:

%Vor%

Beachten Sie, dass leere Verzeichnisse nicht angezeigt werden. Dafür können Sie tun     finde ~ -type d-leer wenn Ihre Version von find es unterstützt.

    
Henrik Hedemann 27.06.2015 08:12
quelle

Tags und Links