Поиск изображений PNG размером больше x пикселей через оболочку Linux
Когда вы пытаетесь изменить дизайн своего веб-сайта, вам необходимо учитывать ширину изображений в содержании статьи. У меня заведомо большие скриншоты по большинству статей, которые я написал, поэтому, если я хочу увеличить боковую панель, важно выяснить, какие картинки будут слишком широкими, чтобы соответствовать новому дизайну..
Поскольку я программист, мне было бы легко написать небольшое приложение для этого, но это заставило меня задуматься… почему я не могу сделать это в командной строке Linux?
Первое, что я понял, это то, что изображения PNG отображают данные о размере, когда вы запускаете для них команду «file»:
$ file image3.png
image3.png: данные изображения PNG, 613 x 657, 8-битный / цветной RGBA, без чередования
Очень полезно, так как 99% изображений на этом сайте в формате PNG. Так что теперь, чтобы бросить это в цикле для всех файлов в моем каталоге загрузки:
$ для f в * .png; сделать файл $ f; сделано
image.png: данные изображения PNG, 631 x 185, 8-битный / цветной RGBA, не чересстрочный
image1.png: данные изображения PNG, 631 x 96, 8-битный / цветной RGBA, без чередования
image10.png: данные изображения PNG, 375 x 395, 8-битный / цветной RGBA, не чересстрочный
image11.png: данные изображения PNG, 484 x 241, 8-битный / цветной RGBA, не чересстрочный
-пропущено-
Это более полезно, но для сортировки данных мне нужно перетащить данные в Excel или аналогичное приложение, поэтому я решил использовать команду linux «cut», чтобы вытащить только столбец width..
Вы заметите, что параметр -f5 заставляет cut брать пятый столбец, а -d \ с пробелом после него указывает cut использовать пробел в качестве разделителя. Косая черта \ символ - это escape-символ, который указывает оболочке использовать пробел как символ, а не как пробел.
$ для f в * .png; сделать файл $ f | cut -f5 -d \; сделано
631
631
375
484
-пропущено-
Не совсем полезный вывод, не так ли? Давайте протолкнем это через оператор bash if, а затем покажем вывод команды file только тогда, когда ширина больше 600 пикселей.
Обратите внимание на отметки '(backtick) вокруг “файла $ f | раздел… », который указывает, что команды внутри 'будут обрабатываться как один вывод и вводиться в оператор if, где мы используем -gt (больше, чем). Также обратите внимание, что вам нужны пробелы по обеим сторонам скобок []
для f в * .png; делать, если ['file $ f | cut -f5 -d \ '-gt 600]; затем файл $ f; fi; готово
image.png: данные изображения PNG, 631 x 185, 8-битный / цветной RGBA, не чересстрочный
image1.png: данные изображения PNG, 631 x 96, 8-битный / цветной RGBA, без чередования
image17.png: данные изображения PNG, 638 x 340, 8-битный / цветной RGBA, не чересстрочный
image18.png: данные изображения PNG, 608 x 448, 8-битный / цветной RGBA, не чересстрочный
-пропущено-
Теперь у нас есть список всех файлов шириной более 600 пикселей. Вы можете настроить «file $ f» в конце, чтобы просто выводить имена файлов, если вам нужно скопировать или переместить их в другое место:
для f в * .png; делать, если ['file $ f | cut -f5 -d \ '-gt 600]; затем эхо $ f; fi; сделано
image.png
image1.png
image17.png
image18.png
-пропущено-
Оболочка Linux невероятно мощная! Это решение не очень практично для всех, но полезно знать, как работать с оболочкой, чтобы вы могли выполнять такие задачи, когда вам нужно.