2017-01-16 2 views
0

コマンドsipsには、ファイルから情報を読み取るための素晴らしいオプションがあります。次のコマンドは、すべての画像をループし、幅または高さについての情報を示しています端末:ファイルの名前を変更するためにSIPの画像情報を使用

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

あなたは '幅=「$(一口-g pixelWidth」、例えば、変数にこれらのコマンドの結果を保存し、私が想定したものを使用することができます$ 1 ")" '、私は思います。私は 'sips'やそれをサイズ変更する方法に慣れていません –

+0

ありがとう、私は私の解決策を使って見つけました...私はここに投稿します:) – Phlow

答えて

1

私はそれを自分で見つけました。これは素晴らしいbashスクリプトです。多分エレガントではないかもしれませんが、動作します - gist on GitHubとしても利用できます。

NEW VERSIONアドバイスのおかげで - コメントを参照してください

#!/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" 'など。 –

関連する問題