1

我有一堆要打印的图片,但是为了让它们正确打印出来,其他每张图片都需要水平翻转。现在,这些图片都是 png 文件,并标有"Foo 001.png", "Foo 002.png". 我在想我需要做的就是查看字符串中包含数字的部分,将其转换为整数,n%2==0检查它是否是偶数,如果是偶数则翻转它。

我不知道是否有一种方便的方法可以使用 bash 从字符串转换为整数,或者我会用什么来翻转图片。

4

3 回答 3

2

使用切换变量翻转列表中的所有其他图像。

X=0

cat filenames | while read -r filename ; do
  if [ $X -eq 1 ] ; then
    # flip $filename
  fi
  # print $filename
  X=$((1-$X))
done

您可以将cat filenames上面替换ls -1 *.jpg为按字母顺序打印*.jpg文件,或ls -1v对它们进行版本排序,这种方式不需要将文件名中的序列号补零。

如果有数千个文件,可以使用ls(无通配符)和/或andgrep之一的组合来代替上述文件,以避免超出限制。findsortARG_MAX

于 2012-11-14T03:56:10.440 回答
1

如果我理解得很好,你想翻转 1/2 png 图像吗?如果是,那么:

convert -flip "Foo *{0,2,4,6,8,10}.png"

或者如果您有太多文件:

# making an array of files
files=( *.png )

# C style for loop (iterating 2 by 2)
for ((i=0; i< ${#files[@]}; i+=2)) {
     # fliping the image
     convert -flip "${files[i]}"
}

convert 命令是著名的imagemagick库的一部分。

于 2012-11-14T03:56:31.550 回答
1

由于 bash 使用字符串比使用数字好得多,所以我的第一个想法是

flip Foo\ *{0,2,4,6,8}.png

flip您用来翻转图片的命令在哪里。

这假设该命令可以接受多个文件名。如果没有,您可以使用循环:

for f in Foo\ *{0,2,4,6,8}.png; do flip "$f"; done
于 2012-11-14T03:53:34.053 回答