2017-01-16 1 views
0

La commande sips a une excellente option pour lire des informations à partir de fichiers. La commande suivante une boucle par toutes les images et affiche des informations sur la largeur ou la hauteur:Terminal: Utiliser les informations d'image de gorgées pour renommer les fichiers

for i in *.jpg; do sips -g pixelWidth $i;done 

for i in *.jpg; do sips -g pixelHeight $i;done 

Maintenant, je voudrais lire cette information et l'utiliser avec mv pour renommer les images comme ceci:

image-widthxheight.jpg 

image-1600x900.jpg 

La dernière chose que je veux accomplir est, d'utiliser sips pour redimensionner les images et écrire les nouvelles informations directement dans le nom de fichier.

Quelqu'un at-il une idée, comment je peux extraire les informations de largeur et la hauteur et de l'utiliser avec mv?

+0

Vous pouvez enregistrer les résultats de ces commandes dans les variables et les utiliser, je suppose, par exemple, 'width = "$ (-G gorgées pixelWidth" $ 1 ")" ", je suppose. Je ne suis pas familier avec 'sips' ni comment obtenir remettre à la côte –

+0

Thankyou, j'ai trouvé ma solution à l'aide ... Je posterai ici :) Votre – Phlow

Répondre

1

je l'ai trouvé moi-même. C'est un bon script bash maintenant. Peut-être pas si élégant, mais cela fonctionne - Il est également disponible en tant que gist on GitHub.

NOUVELLE VERSION MERCI AU CONSEIL - VOIR COMMENTAIRES

#!/bin/bash 
# 
# 1. This script copies all *.jpg-files to a new folder 
# 2. Jumps into folder and resizes all files with sips 
# 3. Renames all files and uses information from sips 
# 
folder="resized_and_renamed" 

mkdir -p "$folder" 

cp *.jpg "$folder" 

cd "$folder" 

# RESIZE ALL IMAGES TO MAXIMUM WIDTH/HEIGHT OF 360 
sips -Z 360 *.jpg 

# RENAME FILES WITH INFORMATION FROM SIPS 
for i in *.jpg 
    do 
    pixelWidth=$(sips -g pixelWidth "$i" | awk '/pixelWidth:/{print $2}') 
    pixelHeight=$(sips -g pixelHeight "$i" | awk '/pixelHeight:/{print $2}') 
    # REMOVE EXTENSION 
    filename=${i%.jpg} 
    # NOW RENAME 
    mv $i ${filename##*/}-${pixelWidth}x${pixelHeight}.jpg 
    done 
+0

' cp' n'a pas besoin d'être dans une boucle, vous copiez tous des fichiers pour chaque fichier là-dedans, donc si vous avez 10 fichiers, vous les copiez tous 10 fois (en supposant que vous n'en ayez pas autant la liste d'arguments devient trop longue). Ensuite, assurez-vous de citer vos variables, si l'une d'entre elles contient un caractère IFS, vous finirez par ne pas exécuter la ou les commandes que vous attendez, ou au moins avec les arguments que vous attendez, et les 2 dernières boucles peut probablement être une seule boucle vraiment, juste resize puis déplacez –

+0

il y a un certain nombre de sous-optimale des aspects dans votre script ... Je vais aborder un aspect dans chaque commentaire il est lisible. –

+0

1. Vous utilisez 'resized_and_renamed' 3 fois ce qui crée un problème de maintenance, vous devriez envisager d'utiliser une seule variable qui signifie qu'il est juste chose à maintenir. Donc 'sub = resized_and_renamed', alors' mkdir "$ sub" 'et ainsi de suite partout. –