2017-01-16 7 views
0

Команда sips имеет отличную возможность считывать информацию из файлов. Следующая команда перебирает все изображения и показывает информацию о ширине или высоте:Терминал: используйте информацию изображения из глотков для переименования файлов

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

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

Теперь я хотел бы прочитать эту информацию и использовать ее с mv переименовывать изображения, например, так:

image-widthxheight.jpg 

image-1600x900.jpg 

Последнее, чего я хочу достичь, - использовать sips для изменения размера изображений и записи новой информации непосредственно в имя файла.

Есть ли у кого-нибудь идея, как я могу извлечь информацию по ширине и высоте и использовать ее вместе с mv?

+0

Вы можете сохранить результаты этих команд в переменных и использовать те, я полагаю, например, 'ширина =«$ (SIPS -g PixelWidth» $ 1 ")", полагаю я. Я не знаком с 'sips' и как его изменить –

+0

Спасибо, я нашел свое решение, используя ... Я размещаю его здесь :) – Phlow

ответ

1

Я сам это нашел. Теперь это хороший скрипт bash. Может быть, не так элегантно, но он работает - он также доступен как gist on GitHub.

НОВАЯ ВЕРСИЯ БЛАГОДАРЯ КОНСУЛЬТАЦИЯ - SEE КОММЕНТАРИИ

#!/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' не должен быть в цикле, вы копируете все файлов для каждого файла там, поэтому, если у вас есть 10 файлов, вы будете копировать их все 10 раз (при условии, что список аргументов слишком велик). Затем обязательно указывайте свои переменные, если у кого-то из них есть символ 'IFS', вы в итоге не будете выполнять команды (ы), которые вы ожидаете, или, по крайней мере, с аргументами, которые вы ожидаете, и последние 2 цикла вероятно, может быть одним циклом, просто измените размер, а затем переместитесь –

+0

В вашем скрипте существует немало субоптимальных аспектов ... Я рассмотрю один аспект в каждом комментарии, чтобы он был разборчивым. –

+0

1. Вы используете 'resized_and_renamed' 3 раза, что создает проблему обслуживания, вы должны использовать одну переменную, что означает, что есть что-то, что нужно поддерживать. Итак, 'sub = resized_and_renamed', затем' mkdir '$ sub "и так далее. –