Finden von PNG-Bildern, die größer sind als x Pixel durch die Linux-Shell
Wenn Sie versuchen, das Design Ihrer Website zu ändern, müssen Sie die Breite der Bilder in Ihrem Artikelinhalt berücksichtigen. 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 breit sein werden, um in das neue Design zu passen.
Da ich Programmierer bin, wäre es leicht für mich, eine kleine Anwendung zu schreiben, aber das brachte mich zum Nachdenken. Warum kann ich das nicht auf der Linux-Befehlszeile tun??
Das erste, was ich herausfand, war, dass PNG-Bilder die Größendaten anzeigen, wenn Sie den Befehl "Datei" auf ihnen ausführen:
$ file image3.png
image3.png: PNG-Bilddaten, 613 x 657, 8-Bit / Farbe-RGBA, nicht interlaced
Sehr nützlich, da 99% der Bilder auf dieser Website im PNG-Format vorliegen. Jetzt werfen wir es in einer Schleife für alle Dateien in meinem Upload-Verzeichnis:
$ für f in * .png; tun Sie die Datei $ f; done
image.png: PNG-Bilddaten, 631 x 185, 8-Bit / Farbe-RGBA, nicht interlaced
image1.png: PNG-Bilddaten, 631 x 96, 8-Bit / Farbe-RGBA, nicht interlaced
image10.png: PNG-Bilddaten, 375 x 395, 8-Bit / Farbe-RGBA, nicht interlaced
image11.png: PNG-Bilddaten, 484 x 241, 8-Bit / Farbe-RGBA, nicht interlaced
-schnippte-
Dies ist nützlicher, aber ich muss die Daten in Excel oder eine ähnliche Anwendung ziehen, um die Daten zu sortieren. Daher habe ich mich dazu entschieden, den Linux-Befehl „cut“ zu verwenden, um nur die Breitenspalte herauszuziehen.
Der Parameter -f5 weist cut an, die fünfte Spalte zu übernehmen, und das -d \ mit einem Leerzeichen, nachdem es cut anweist, ein Leerzeichen als Trennzeichen zu verwenden. Der Schrägstrich \ ist ein Escape-Zeichen, um der Shell mitzuteilen, dass das Leerzeichen als Zeichen und nicht als Leerzeichen verwendet werden soll.
$ für f in * .png; mache die Datei $ f | cut -f5 -d \; erledigt
631
631
375
484
-schnippte-
Nicht ganz nützliche Ausgabe, oder? Lassen Sie uns das durch eine bash-if-Anweisung schieben und zeigen Sie die Ausgabe des Dateibefehls erst dann an, wenn die Breite größer als 600 Pixel ist.
Beachten Sie die '(Backtick) -Markierungen um die' Datei $ f | cut… ”- Abschnitt, der besagt, dass die Befehle innerhalb von 'als einzelne Ausgabe verarbeitet und in die if -Anweisung eingespeist werden, in der ein -gt (größer als) verwendet wird. Beachten Sie auch, dass Sie um die Seiten der Klammern [] Leerzeichen benötigen.
für f in * .png; do, wenn ['file $ f | Schnitt -f5 -d '-gt 600]; dann die Datei $ f; fi; done
image.png: PNG-Bilddaten, 631 x 185, 8-Bit / Farbe-RGBA, nicht interlaced
image1.png: PNG-Bilddaten, 631 x 96, 8-Bit / Farbe-RGBA, nicht interlaced
image17.png: PNG-Bilddaten, 638 x 340, 8-Bit / Farbe-RGBA, nicht interlaced
image18.png: PNG-Bilddaten, 608 x 448, 8-Bit / Farbe-RGBA, nicht interlaced
-schnippte-
Jetzt haben wir eine Liste aller Dateien, die größer als 600 Pixel sind. Sie können die "Datei $ f" am Ende anpassen, um nur die Dateinamen auszuwerten, wenn Sie sie kopieren oder an einen anderen Ort verschieben müssen:
für f in * .png; do, wenn ['file $ f | Schnitt -f5 -d '-gt 600]; dann echo $ f; fi; done
image.png
image1.png
image17.png
image18.png
-schnippte-
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 erledigen können, wenn Sie es brauchen.