Page d'accueil » comment » Recherche d'images PNG d'une taille supérieure à x pixels via le shell Linux

    Recherche d'images PNG d'une taille supérieure à x pixels via le shell Linux

    Lorsque vous essayez de modifier la conception de votre site Web, vous devez vous préoccuper de la largeur des images dans le contenu de votre article. J'ai des captures d'écran notoirement volumineuses sur la plupart des articles que j'ai écrits, donc si je veux agrandir l'encadré, il est essentiel de déterminer quelles images seront trop larges pour s'adapter au nouveau design..

    Étant donné que je suis programmeur, il me serait facile d'écrire une petite application pour le faire, mais cela m'a fait commencer à penser… pourquoi ne puis-je pas le faire sur la ligne de commande Linux?

    La première chose à laquelle j'ai pensé est que les images PNG affichent les données de taille lorsque vous exécutez la commande "fichier":

    $ file image3.png
    image3.png: Données d'image PNG, 613 x 657, RGBA 8 bits / couleur, non entrelacées

    Très utile puisque 99% des images sur ce site sont au format PNG. Alors maintenant, lancez-le en boucle pour tous les fichiers de mon répertoire de téléchargement:

    $ pour f dans * .png; faire le fichier $ f; done

    image.png: données d'image PNG, 631 x 185, RGBA 8 bits / couleur, non entrelacées
    image1.png: Données d'image PNG, 631 x 96, RGBA 8 bits / couleur, non entrelacées
    image10.png: données d'image PNG, 375 x 395, RGBA 8 bits / couleur, non entrelacées
    image11.png: Données d'image PNG, 484 x 241, RGBA 8 bits / couleur, non entrelacées
    -coupé-

    C'est plus utile, mais je devais extraire les données dans Excel ou une application similaire afin de les trier. J'ai donc décidé d'utiliser la commande «cut» de Linux pour extraire uniquement la colonne width..

    Vous remarquerez que le paramètre -f5 indique à cut de prendre la cinquième colonne et que -d \ avec un espace après lui indique de couper un espace en tant que délimiteur. La barre oblique \ caractère est un caractère d'échappement pour indiquer au shell d'utiliser l'espace comme un caractère et non comme un espace..

    $ pour f dans * .png; le fichier $ f | cut -f5 -d \; done

    631
    631
    375
    484
    -coupé-

    Pas tout à fait utile, n'est-ce pas? Passons cela à travers une instruction bash if, et affichons uniquement le résultat de la commande de fichier lorsque la largeur est supérieure à 600 pixels..

    Remarquez les marques '(morsures) autour du “fichier $ f | cut… ”, qui indique que les commandes à l'intérieur de 'seront traitées comme une seule sortie et introduites dans l'instruction if, où nous utilisons un -gt (supérieur à). Notez également qu'il vous faut des espaces de part et d'autre des crochets []

    pour f dans * .png; faire si ['fichier $ f | cut -f5-d \ '-gt 600]; puis fichier $ f; fi; done

    image.png: données d'image PNG, 631 x 185, RGBA 8 bits / couleur, non entrelacées
    image1.png: Données d'image PNG, 631 x 96, RGBA 8 bits / couleur, non entrelacées
    image17.png: données d'image PNG, 638 x 340, RGBA 8 bits / couleur, non entrelacées
    image18.png: Données d'image PNG, 608 x 448, RGBA 8 bits / couleur, non entrelacées
    -coupé-

    Nous avons maintenant une liste de tous les fichiers de plus de 600 pixels de large. Vous pouvez ajuster le "fichier $ f" à la fin pour faire simplement écho aux noms de fichiers si vous aviez besoin de les copier ou de les déplacer ailleurs:

    pour f dans * .png; faire si ['fichier $ f | cut -f5-d \ '-gt 600]; alors echo $ f; fi; done

    image.png
    image1.png
    image17.png
    image18.png
    -coupé-

    Le shell Linux est incroyablement puissant! Cette solution n'est pas vraiment pratique pour tout le monde, mais il est bon de savoir comment utiliser le shell pour pouvoir accomplir ce type de tâche lorsque vous en avez besoin..