首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写bash脚本来调整图像大小,将它们移动到另一个文件夹并重命名它们

编写bash脚本来调整图像大小,将它们移动到另一个文件夹并重命名它们
EN

Unix & Linux用户
提问于 2020-09-18 13:57:33
回答 1查看 1.4K关注 0票数 2

我有一个文件夹,有大约300张图片,每个300像素,它们是艺术家的图像。在该文件夹中,我创建了另一个名为60的文件夹。

我希望将每个图像的大小调整为60x60像素,通过将-60追加到其名称来重命名该文件,并将其移动到/60文件夹中。

因此,假设我有一个名为bob-dylan.jpg的图像,我想要调整大小,然后将其重命名为bob-dylan-60.jpg,然后移动,使其位于/60/bob-dylan-60.jpg中。

我已经尝试通过自己编写一个shell脚本batch-resize.sh来做到这一点。我已经把脚本变成了可执行文件。脚本尝试使用ImageMagick。到目前为止我的情况是这样的。

批大小.

代码语言:javascript
复制
#! /bin/bash

for f in /mnt/c/Users/jwan/Pictures/bejebeje-artist-images/*; do
  mogrify -path /mnt/c/Users/jwan/Pictures/bejebeje-artist-images/60 -resize 60x60 $f
done

这将调整图像的大小,并将其移动到/60目录,但不会重命名文件。我真的很纠结于改名。

我确实在网上搜索过,我看到了一堆%符号,但没有解释。

如果有人能告诉我如何在我也要做的文件重命名的基础上进行构建,我会很感激,但也可以解释如何实现重命名。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-09-18 15:25:33

bash scriptname /path/to/files的形式执行此操作:

代码语言:javascript
复制
#!/bin/bash
for f in "$1"/*.{jpg,png}; do
  [ -f "$f" ] || continue
  base=$(basename "$f")
  convert -resize 60x60 "$f" "$1/60/${base%.*}-60.${base##*.}"
done

如果需要,向大括号添加更多扩展。

convert接受一个输入文件$f,并将调整大小的结果放在$1/60目录中($1是参数)。

  • [ -f "$f" ] || continue跳过操作,以防f不是常规文件。您肯定不想调整目录的大小。
  • basename从文件名中移除路径。例如,a/b/c.jpg变成c.jpg
  • ${base##*.}从文件的basename中删除直到最后一个点的所有内容。因此,它得到了扩展。
  • ${base%.*}在扩展名之后删除所有内容。
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/610063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档