Wenn Sie versuchen, das Design Ihrer Website zu ändern, müssen Sie sich um die Breite der Bilder in Ihrem Artikelinhalt kümmern. Ich habe notorisch große Screenshots von den meisten Artikeln, die ich geschrieben habe. Wenn ich also die Seitenleiste vergrößern möchte, ist es wichtig herauszufinden, welche Bilder zu breit sind, um in das neue Design zu passen.
Da ich Programmierer bin, wäre es einfach für mich, eine kleine Anwendung dafür zu schreiben, aber es brachte mich zum Nachdenken… Warum kann ich das nicht über die Linux-Befehlszeile tun?
Das erste, was ich herausgefunden habe, war, dass PNG-Bilder die Größendaten anzeigen, wenn Sie den Befehl „Datei“ ausführen:
$ file image3.png
image3.png: PNG-Bilddaten, 613 x 657, 8-Bit/Farbe RGBA, ohne Zeilensprung
Sehr nützlich, da 99% der Bilder auf dieser Site im PNG-Format vorliegen. Um es jetzt für alle Dateien in meinem Upload-Verzeichnis in eine Schleife zu werfen:
$ für f in *.png;Datei ausführen $f;fertig
image.png: PNG-Bilddaten, 631 x 185, 8-Bit/Farbe RGBA, ohne Zeilensprung
image1.png: PNG-Bilddaten, 631 x 96, 8-Bit/Farbe RGBA, ohne Zeilensprung
image10.png: PNG-Bilddaten, 375 x 395, 8-Bit/Farbe RGBA, ohne Zeilensprung
image11.png: PNG-Bilddaten, 484 x 241, 8-Bit/Farbe RGBA, ohne Zeilensprung
—geschnippelt—
Dies ist nützlicher, aber ich müsste die Daten in Excel oder eine ähnliche Anwendung ziehen, um die Daten zu sortieren, also entschied ich mich, den Linux-Befehl „cut“ zu verwenden, um nur die Breitenspalte herauszuziehen.
Sie werden feststellen, dass der Parameter -f5 cut anweist, die fünfte Spalte zu verwenden, und das -d mit einem Leerzeichen danach weist cut an, ein Leerzeichen als Trennzeichen zu verwenden. Der Schrägstrich 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 ausführen $f|cut -f5 -d ;fertig
631
631
375
484
—geschnippelt—
Nicht ganz brauchbare Ausgabe, oder? Lassen Sie uns das durch eine bash if-Anweisung schieben und dann nur die Ausgabe des Dateibefehls anzeigen, wenn die Breite größer als 600 Pixel ist.
Beachten Sie die ` (Backtick) Markierungen um die „Datei $f | cut…“, die angeben, dass die Befehle innerhalb von ` als einzelne Ausgabe verarbeitet und in die if-Anweisung eingespeist werden, wobei wir ein -gt (größer als) verwenden. Beachten Sie auch, dass Sie auf beiden Seiten der Klammern Leerzeichen benötigen [ ]
für f in *.png;do if [ `file $f | cut -f5 -d ` -gt 600 ] ; dann Datei $f;fi;fertig
image.png: PNG-Bilddaten, 631 x 185, 8-Bit/Farbe RGBA, ohne Zeilensprung
image1.png: PNG-Bilddaten, 631 x 96, 8-Bit/Farbe RGBA, ohne Zeilensprung
image17.png: PNG-Bilddaten, 638 x 340, 8-Bit/Farbe RGBA, ohne Zeilensprung
image18.png: PNG-Bilddaten, 608 x 448, 8-Bit/Farbe RGBA, ohne Zeilensprung
—geschnippelt—
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 auszusprechen, wenn Sie sie kopieren oder an einen anderen Ort verschieben müssen:
für f in *.png;do if [ `file $f | cut -f5 -d ` -gt 600 ] ; dann echo $f;fi;fertig
bild.png
image1.png
image17.png
image18.png
—geschnippelt—
Die Linux-Shell ist unglaublich mächtig! Diese Lösung ist nicht für jeden praktisch, aber es ist gut zu wissen, wie man mit der Shell arbeitet, damit Sie diese Art von Aufgabe bei Bedarf erledigen können.