Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 终端:使用sips中的图像信息重命名文件_Bash_Image_Terminal_Rename_Sips - Fatal编程技术网

Bash 终端:使用sips中的图像信息重命名文件

Bash 终端:使用sips中的图像信息重命名文件,bash,image,terminal,rename,sips,Bash,Image,Terminal,Rename,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调整图像大小,并将新信

命令
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
一起使用吗?

我自己发现的。这是一个很好的bash脚本。也许不那么优雅,但它可以工作——它也可以作为一个

新版本得益于此建议–请参阅评论


您可以将这些命令的结果保存在变量中,并使用我假设的结果,例如,
width=“$(sips-g pixelWidth“$1”)”
,我假设。我不熟悉
sips
也不知道如何将它复制到resizeThankyou,我发现我的解决方案是使用…我在这里发布:)你的
cp
不需要在一个循环中,你在那里复制每个文件的所有文件,因此如果你有10个文件,你会将它们全部复制10次(假设你没有那么多,参数列表会变得太长). 然后,请务必引用您的变量,如果其中任何一个变量中有
IFS
字符,那么您最终将无法运行您期望的命令,或者至少无法运行您期望的参数,最后两个循环可能是一个单循环,只需调整大小,然后移动脚本中有许多次优方面。。。我将在每条评论中说明一个方面,使其易读。您使用<代码> RsiZeDyx和Ya重命名< /COD> 3次,创建一个维护问题,您应该考虑使用单个变量,这意味着只需要维护。因此
sub=resized\u和_重命名
,然后
mkdir“$sub”
等等。考虑使用<代码> MKDIR -p“$新建”< /C> >,以便它可以运行一次以上而不出错。您的脚本将在第二次和后续调用时出错。第12-15行应该是
cp*.jpg“$new”
而不是循环。
#!/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