2010-12-15 3 views
2

Shell-Skript zum Auflisten der Dateien in einem Verzeichnis rekursiv, das ist riesig. Ich verwende:Shell-Skript, um die größeren Dateien in einem Verzeichnis rekursiv aufzulisten

find <path> -mtime +20 -exec ls -ls {} \; | sort -n -r | head -100 | awk '{print $10}' 

Probleme:

  • Langsamer Ausführung
  • Ich bin nicht Berechtigungen innerhalb weniger Unterverzeichnisse

Gibt es einen besseren Weg, dies zu erreichen, gelesen zu haben? Ich habe versucht:

du <path> | sort -n -r | head -n 100 

Viel schneller, aber nicht so effektiv.

+0

versuchen Sie es auch ls -R, aber sie würden alle die gleichen Systemaufrufe im Inneren verwenden, so sollte vergleichbare Leistung haben – bobah

+0

'... ls -s ... awk '{print $ 2}' 'könnte ein bisschen mehr tragbar sein. –

Antwort

0

Fund - size + k -atime + -printf "% s, \ t% a, \ t% p \ n" | sortieren -nr

gibt Ihnen die gewünschte Ausgabe

hier ist der Sike auf kb und das Alter ist die letzte Zugriffszeit.

1

Je nach Größenverteilung der Dateien Ihre find finden ist, können Sie das -size Prädikat verwenden betrachten viele der kleineren Fische auszusortieren, bevor die Liste auf sort abgeladen wird. Wenn dies etwas ist, das Sie regelmäßig ausführen, notieren Sie sich, wenn Sie weniger als 100 Zeilen von head erhalten, und verwenden Sie das als Hinweis darauf, dass es Zeit ist, die Größenbeschränkung zu verringern, die Sie geben find.

Der Mangel an Berechtigungen ist kein Problem, das Sie überwinden können, ohne die Berechtigungen für die betreffenden Verzeichnisse zu ändern oder Ihre Rechte zu erweitern, so dass Sie sie lesen können.

1

du ist fast da, versuchen

du -aS | sort -n -r | head -n 100 

dem Sie nur die großen Dateien zurückgeben alle Verzeichnisse ohne

+0

Konnte den Befehl -b oder -k für den Befehl für mehr lesbare Größen hinzufügen –

1

Fund verfügt über eine praktische -printf Richtlinie:

find . -type f -printf "%s\t%p\n" | sort -nr | head -n 100

Verwandte Themen