Gesamtgröße der Gruppe von Dateien ausgewählt mit ‚finden‘
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.
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