Frage

Zum Beispiel, ich habe ein großes Dateisystem, das schneller füllt mich als ich erwartet hatte. So sehe ich für das, was hinzugefügt wird werden:

find /rapidly_shrinking_drive/ -type f -mtime -1 -ls | less

Und ich finde, na ja, viele Sachen. Tausende von Dateien von sechs bis sieben Arten. Ich kann eine Art heraus und zählen sie:

find /rapidly_shrinking_drive/ -name "*offender1*" -mtime -1 -ls | wc -l

aber was ich möchte wirklich in der Lage sein, um die Gesamtgröße dieser Dateien auf der Festplatte zu bekommen:

find /rapidly_shrinking_drive/ -name "*offender1*" -mtime -1 | howmuchspace

Ich bin offen für ein Perl-Einzeiler für diese, wenn jemand ein bekam, aber ich werde keine Lösung verwenden, die ein mehrzeiliges Skript umfasst, oder File :: Find.

War es hilfreich?

Lösung

Der Befehl du informiert Sie über Festplattennutzung. Beispiel zur Nutzung für Ihren speziellen Fall:

find rapidly_shrinking_drive/ -name "offender1" -mtime -1 -print0 | du --files0-from=- -hc | tail -n1

(Früher schrieb ich du -hs, aber auf meiner Maschine, die find Eingangs- und stattdessen einen Überblick über die Größe des cwd. Außer Acht zu lassen erscheint)

Andere Tipps

Darn, ist Stephan202 Recht. Ich glaube nicht, über du -s (zusammenfassen), so stattdessen habe ich awk:

find rapidly_shrinking_drive/ -name "offender1" -mtime -1 | du | awk '{total+=$1} END{print total}'

Ich mag die andere Antwort besser aber, und es ist mit ziemlicher Sicherheit effizienter zu gestalten.

mit GNU finden,

 find /path -name "offender" -printf "%s\n" | awk '{t+=$1}END{print t}'

Ich möchte Jasons Kommentar oben auf den Status der Antwort fördern, weil ich es ist die mnemonic glauben (wenn auch nicht die allgemeinste, wenn Sie wirklich die Dateiliste nach find angegeben gotta haben):

$ du -hs *.nc
6.1M  foo.nc
280K  foo_region_N2O.nc
8.0K  foo_region_PS.nc
844K  foo_region_xyz.nc
844K  foo_region_z.nc
37M   ETOPO1_Ice_g_gmt4.grd_region_zS.nc
$ du -ch *.nc | tail -n 1
45M total
$ du -cb *.nc | tail -n 1
47033368  total

Ich habe alle diese Befehle versucht, aber kein Glück. So habe ich diese hier gefunden, die mir eine Antwort gibt:

find . -type f -mtime -30 -exec ls -l {} \; | awk '{ s+=$5 } END { print s }'

Sie können auch ls -l nutzen, um ihre Größe zu finden, dann awk die Größe zu extrahieren:

find /rapidly_shrinking_drive/ -name "offender1" -mtime -1 | ls -l | awk '{print $5}' | sum
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top