29Jun

Finden von PNG-Bildern, die größer als x Pixel sind, durch die Linux-Shell

click fraud protection

Wenn Sie versuchen, das Design Ihrer Website zu ändern, müssen Sie sich Gedanken über die Breite der Bilder in Ihrem Artikelinhalt machen. Ich habe notorisch große Screenshots zu den meisten Artikeln, die ich geschrieben habe. Wenn ich also die Seitenleiste vergrößern möchte, ist es wichtig, herauszufinden, welche Bilder zu groß sind, um in das neue Design zu passen.

Da ich ein Programmierer bin, würde es mir leicht fallen, eine kleine Anwendung dafür zu schreiben, aber es ließ mich anfangen zu denken. .. warum kann ich das nicht auf der Linux-Kommandozeile machen?

Das erste, was ich herausgefunden habe, war, dass PNG-Bilder die Größe anzeigen, wenn Sie den Befehl "file" ausführen:

$ file image3.png
image3.png: PNG-Bilddaten, 613 x 657, 8-Bit / FarbeRGBA, non-interlaced

Sehr nützlich, da 99% des Bildes auf dieser Seite im PNG-Format sind. Also jetzt, um es in eine Schleife für alle Dateien in meinem Upload-Verzeichnis zu werfen:

$ für f in *. png; Datei $ f; getan

instagram viewer

image.png: PNG-Bilddaten, 631 x 185, 8-Bit / FarbeRGBA, nicht verschachtelt
image1.png: PNG-Bilddaten, 631 x 96, 8-Bit / Farbe RGBA, nicht verschachtelt
image10.png: PNG-Bilddaten, 375 x 395, 8-Bit / Farbe RGBA, nichtinterlaced
image11.png: PNG-Bilddaten, 484 x 241, 8-Bit / Farbe RGBA, nicht-interlaced
-snipped-

Dies ist nützlicher, aber ich müsste die Daten in Excel oder eine ähnliche Anwendung ziehenUm die Daten zu sortieren, entschied ich mich, den linux "cut" -Befehl zu verwenden, um nur die Breite Spalte herauszuziehen.

Sie werden feststellen, dass der Parameter -f5 cut anweist, die fünfte Spalte zu übernehmen, und -d \ mit einem Leerzeichen, nachdem es cut angewiesen hat, ein Leerzeichen als Trennzeichen zu verwenden. Der Schrägstrich \ Zeichen ist ein Escape-Zeichen, um der Shell mitzuteilen, dass sie das Leerzeichen als Zeichen und nicht als Leerzeichen verwenden soll.

$ für f in *. png; Datei $ f | cut -f5 -d \; fertig

631
631
375
484
-snipped-

Nicht ganz brauchbare Ausgabe, oder? Lassen Sie uns das durch eine bash if-Anweisung führen und zeigen Sie dann nur die Ausgabe des Dateibefehls an, wenn die Breite größer als 600 Pixel ist.

Beachten Sie die `(Backtick) -Markierungen um die" Datei $ f |cut. .. "Abschnitt, die anzeigen, dass die Befehle innerhalb des` `als eine einzige Ausgabe verarbeitet und in die if-Anweisung eingegeben werden, wobei wir ein -gt( größer als) verwenden. Beachten Sie auch, dass Sie an jeder Seite der Klammern Leerzeichen benötigen []

für f in *. png; tun Sie falls [`file $ f |Schnitt -f5 -d \ '-gt 600];dann Datei $ f; fi; erledigt

image.png: PNG-Bilddaten, 631 x 185, 8-Bit / Farbe RGBA, nicht-verschachtelt
image1.png: PNG-Bilddaten, 631 x 96, 8-Bit / Farbe RGBA, non-interlaced
image17.png: PNG-Bilddaten, 638 x 340, 8-Bit / Farbe RGBA, nicht-verschachtelt
image18.png: PNG-Bilddaten, 608 x 448, 8-Bit / Farbe RGBA, nicht verschachtelt
-snipped-

Jetzt haben wir eine Liste aller Dateien, die größer als 600 Pixel sind. Sie könnten die "Datei $ f" am Ende so anpassen, dass die Dateinamen nur dann wiedergegeben werden, wenn Sie sie irgendwo anders kopieren oder verschieben müssen:

für f in *. png; tun Sie wenn [`file $ f |Schnitt -f5 -d \ '-gt 600];dann echo $ f; fi; getan

image.png
image1.png
image17.png
image18.png
-geschlossen-

Die Linux-Shell ist unglaublich mächtig! Diese Lösung ist nicht wirklich praktisch für alle, aber es ist gut zu wissen, wie man mit der Shell arbeitet, damit Sie diese Art von Aufgabe bei Bedarf erledigen können.