Główna » jak » Znajdowanie obrazów PNG większych niż x pikseli w powłoce systemu Linux

    Znajdowanie obrazów PNG większych niż x pikseli w powłoce systemu Linux

    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 zdjęcia będą zbyt szerokie, aby pasowały do ​​nowego projektu.

    Ponieważ jestem programistą, byłoby mi łatwo napisać do tego niewielką aplikację, ale zmusiło mnie to do myślenia ... dlaczego nie mogę tego zrobić w 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:

    $ dla f w * .png; do pliku $ f; zrobione

    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" linuxa, by 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; wykonaj, jeśli ['plik $ f | cut -f5 -d \ '-t 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 większych niż 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; wykonaj, jeśli ['plik $ f | cut -f5 -d \ '-t 600]; następnie echo $ f; fi; done

    image.png
    image1.png
    image17.png
    image18.png
    -snipped-

    Powłoka Linux 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, gdy trzeba.