2017-01-16 60 views
0

命令sips有一个很好的选择来从文件读取信息。下面的命令通过所有图片循环,并显示在宽度和高度的信息:终端:使用图像信息从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

您可以保存这些命令的变量的结果,并使用这些我假设,例如,'WIDTH =“$(SIPS -g pixelWidth” $ 1“)”',我假设。我不熟悉'sips',也不知道如何调整它的大小 –

+0

Thankyou,我发现我的解决方案使用...我在这里发布:) – Phlow

回答

1

我自己发现了它。这是一个很棒的bash脚本。也许不那么优雅,但它的作品 - 它也可以作为gist on GitHub

新版本感谢的建议 - 看评论

#!/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“'等等。 –