2017-01-16 2 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

당신은 변수 이러한 명령의 결과를 저장하고 내가 생각하는, 예를 들어, '폭 = "$ (모금 -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' 문자가 있으면 원하는 명령을 실행하지 않게 될 것입니다. 또는 최소한 예상 한 인수를 사용하고 마지막 두 루프 아마 하나의 루프 일 수 있습니다. 그냥 크기를 조정 한 후 움직이십시오. –

+0

스크립트에 몇 가지 차선책이 있습니다. 각 설명에서 한 가지 측면을 다룰 것이므로 쉽게 읽을 수 있습니다. –

+0

1.'resized_and_renamed'를 세 번 사용하면 유지 관리 문제가 발생하므로 유지 관리 할 단일 변수를 사용하는 것을 고려해야합니다. 그래서'sub = resized_and_renamed', 그리고 나서'mkdir "$ sub"'등등. –