Kiedy próbujesz pracować nad zmianą projektu witryny, musisz się martwić o szerokość zdjęć w treści artykułu. Mam bardzo duże zrzuty ekranów na większości artykułów, które napisałem, więc jeśli chcę zwiększyć pasek boczny, ważne jest, aby dowiedzieć się, które obrazy będą zbyt szerokie, aby pasowały do nowego projektu.
Ponieważ jestem programistą, byłoby mi łatwo napisać do tego małą aplikację, ale zacząłem myśleć ... dlaczego nie mogę tego zrobić na linii poleceń Linuksa?
Po pierwsze zorientowałem się, że obrazy PNG wyświetlają dane o rozmiarze po uruchomieniu na nich polecenia "file":
$ file image3.png
image3.png: Dane obrazu PNG, 613 x 657, 8-bit / kolor RGBA, bez przeplotu
Bardzo przydatne, ponieważ 99% obrazu na tej stronie jest w formacie PNG. Więc teraz wyrzućmy go w pętli dla wszystkich plików w moim katalogu upload:
$ for f in * .png; do file $ f; done
image.png: dane obrazu PNG, 631 x 185, 8-bit / kolor RGBA, bez przeplotu
image1.png: Dane obrazu PNG, 631 x 96, 8-bit / kolor RGBA, bez przeplotu
image10.png: Dane obrazu PNG, 375 x 395, 8-bit / kolor RGBA, bez przeplotu
image11.png: Dane obrazu PNG, 484 x 241, 8-bit / kolor RGBA, bez przeplotu
-snipped-
Jest to bardziej przydatne, ale musiałbym pobierać dane do Excela lub podobnej aplikacji w celu sortowania danych, więc zdecydowałem się użyć polecenia "cut" linuksa, aby wyciągnąć tylko kolumnę szerokości.
Zauważysz, że parametr -f5 mówi, że cut ma pobrać piątą kolumnę, a -d \ z spacją po tym, jak poleci cut, aby użyć spacji jako separatora. Slash \ character to znak ucieczki, który nakazuje powłoce używać spacji jako postaci, a nie jako białych znaków.
$ dla f w * .png; zrób plik $ f | cut -f5 -d \; done
631
631
375
484
-snipped-
Niezupełnie przydatny wynik, prawda? Przepuśćmy to przez instrukcję bash, a następnie pokażmy tylko wynik polecenia file, gdy szerokość jest większa niż 600 pikseli.
Zwróć uwagę na "(znaki cofania) wokół" pliku $ f | cut ... "sekcja, która wskazuje, że polecenia wewnątrz 'będą przetwarzane jako pojedyncze wyjście i podawane do instrukcji if, gdzie używamy opcji -gt (większej niż). Zwróć też uwagę, że potrzebujesz spacji po obu stronach nawiasów []
dla f w * .png; zrobić, jeśli ['plik $ f | wyciąć -f5 -d \ '-gt 600]; następnie plik $ f; fi; done
image.png: dane obrazu PNG, 631 x 185, 8-bit / kolor RGBA, bez przeplotu
image1.png: Dane obrazu PNG, 631 x 96, 8-bit / kolor RGBA, bez przeplotu
image17.png: Dane obrazu PNG, 638 x 340, 8-bit / kolor RGBA, bez przeplotu
image18.png: Dane obrazu PNG, 608 x 448, 8-bit / kolor RGBA, bez przeplotu
-snipped-
Teraz mamy listę wszystkich plików o szerokości przekraczającej 600 pikseli. Możesz ustawić "plik $ f" na końcu, aby tylko echo nazwy plików, jeśli chcesz skopiować lub przenieść je gdzie indziej:
dla f w * .png; zrobić, jeśli ['plik $ f | wyciąć -f5 -d \ '-gt 600]; następnie echo $ f; fi; done
image.png
image1.png
image17.png
image18.png
-snipped-
Powłoka Linuksa jest niesamowicie potężna! To rozwiązanie nie jest praktyczne dla wszystkich, ale dobrze jest wiedzieć, jak pracować z powłoką, aby można było wykonać to zadanie, kiedy trzeba.