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

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

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

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

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

我尝试自己编写一个 shell 脚本来做到这一点batch-resize.sh。我已经使脚本成为可执行文件。该脚本尝试使用 ImageMagick。这是我到目前为止所拥有的。

批量调整大小.sh

#! /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目录中它不会重命名该文件。我真的很挣扎于重命名。

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

如果有人可以向我展示如何在我必须重命名文件的基础上进行构建,同时也解释一下,我将不胜感激如何重命名就实现了。

答案1

执行如下bash scriptname /path/to/files

#!/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" ] || continuef如果不是常规文件,则跳过该操作。您肯定不想调整目录的大小。
  • basenamegets 从文件名中删除路径。例如,a/b/c.jpg变成c.jpg.
  • ${base##*.}从文件的基本名称中删除直到最后一个点的所有内容。因此它得到了扩展。
  • ${base%.*}删除扩展名后的所有内容。

相关内容