Größe aller PHP-Scripte in einer Hierarchie

Mich hatte gerade interessiert, wie groß eigentlich die PHP-Scripte innerhalb einer bestimmten Hierarchie („Ordnerstruktur“) sind.

Dazu gibt es zwei Ansätze, die mir spontan „eingefallen“ sind (also mit Hilfe von Google „von ganz alleine“ klar geworden sind).

find

Zunächst mal geht es natürlich mit find und einer netten Verkettung von Umständen:

find . -type f -name '*.php' -exec du -ch {} + | grep total$

Das liefert dann ggf. mehrere Ergebnisse, die händisch addiert werden wollen – das überfordert noch nicht mal mich Matheversager:

39M total
21M total
28M total
7.4M total

Insgesamt also 95,4M(B).

du

Mit du geht es natürlich auch, sogar in viel kürzer:

du -ch -- **/*.php | tail -n 1

Das liefert netterweise direkt das Gesamtergebnis.

95M total

Aber mich hat da die Laufzeit irgendwie gewundert, gefühlt war das einfache du erheblich langsamer… also… Nerdtime Baby!

Unterschied

Nehmen wir mal das schweizer Taschenmesser für die Zeitmessung zur Hilfe (time) und probieren wir – ganz wissenschaftlich – ein paar Mal dasselbe Kommando, damit der Cache auch genug zu brabbeln hatte und die jeweiligen Kommandos nur noch Netto arbeiten müssen.

fight it baby - find vs du 2
fight it baby – find vs du 2

find brauchte das erste Mal 13,71s – das zweite Mal nur noch 9,73s. du schnarcht beim ersten Mal 19,71s – beim zweiten Mal aber flotte 7,16s.

Ähm. Also gefühlt hatte ich wohl mit meinem Gefühl Recht, die find-Kommandokette war schneller (ohne vorheriges Warmlaufen). du hat aber aufgeholt, wenn es zuvor schon mal dasselbe tun durfte.

Da ich in der Regel dieselbe Auswertung nicht erst mal zum Warmlaufen und dann erst für die Nutzung erstellen, ist der Gewinner also…

…and the winner is: FIND

So. Genug für jetzt. Ich teste jetzt weiter den Eierlikör, den ich aus den Eiern unserer Hühner vorhin geschüttelt habe. Einmal auf Wodka- und einmal auf Rumbasis. Ich bin noch nicht sicher, was mir besser schmeckt, deshalb muss das jetzt unbedingt noch bis ins Detail ausgewertet werden.

Mir doch egal, dass Saufen am Mittag verpönt ist 😀

Foto suchen mit Aufnahmedatum 09/2015

Oh man. Meine Frau hat im September 2015 ein Foto mit ihrem iPhone aufgenommen – und sie sucht das jetzt.

Problem: Sie kopiert nur alle Schaltjahr mal ihre Bilder vom iPhone runter, kümmert sich nicht um den Dateinamen und ordnen die Bilder auch sonst nicht.

Exif, wir lieben dich

Also muss man wohl die Exifdaten auslesen und schauen, ob dort ein sinnvolles Datum untergebracht ist.

Mittels Exiftool geht das. Einem süßen kleinen Perl-Perlchen von ATV/Alexander Vonk beziehbar über CPAN.

exiftool yeah
exiftool yeah

Würde mal auf Anhieb sagen, sieht gut aus. Da stehen Datumsangaben drin, die auch noch brauchbar aussehen.

2TB durchsuchen & finden

Jetzt die Frage, wie durchwühlen wir jetzt den gesamten Baum der Dateien… sind ja nur knapp 2TB.

find -iname "*.jpg" -print0 | xargs -0 exiftool -a | grep "Date" | grep "2015:09"

Öhm ich sag ma: Ja, der findet das passende Datum, aber hilft mir nicht weiter:

grep this!
grep this!

Wir haben den Erkenntnisgewinn: Datei aus passendem Zeitraum gibt es, aber wir verraten dir nicht, wie die Datei heißt.

Also anderer Ansatz. Nutze die Macht! Ein Bash-Script muss her 🙂

bash it!
bash it!

Funzt. Nicht. Wir haben ja menschenlesbare Verzeichnis- und Dateinamen. Da sind Leerzeichen drin und darüber nässt sich die Schleife leider ein. Also…

bash it right!
bash it right!

Da soll noch mal einer sagen, dass nächtelanges „vor dem Rechner Rumhängen und Nixtun“ irgendwie sinnlos wäre. Und/oder testen: So globalgalaktisch gesehen der größte Zeitfresser im IT-Leben, aber auch der größe Lebensretter – wäre zu peinlich gewesen, wenn ich nachher meiner Frau hätte beichten müsste, das mein neuester „Geniestreich“ wieder in die Hose gegangen ist…

Jetzt läuft das Script mal die nächsten Stunden (oh… ich könnte noch ein time davorhängen… Ctrl+C). Ich häng‘ mich jetzt wirklich mal nutzlos vor eine Kiste – ich guck Netflix – im Wohnzimmer – mit unseren fünf Hunden – und meiner Süßen. Bei der Reihenfolge stimmt jetzt aus politischen Gründen was nicht, glaube ich.

Alles gut, Arbeit übernimmt jetzt die Maschine, so muss das. Bierchen?

Update: So – Script ist durch

time recurs exifgrep
time recurs exifgrep