在 bash 中使用 * 时如何输出到同一个文件

use*_*312 0 bash

我正在尝试convert -resize 1024X768 source.png dest.jpg在一系列图像上使用该命令。我需要将它应用于我可以执行的所有图像,convert -resize 1024X768 *.png但我想知道如何提供与目标相同的文件名。

我仅以 convert 命令为例。

sud*_*dus 6

您可以尝试使用for命令行

用“试运行”测试,

for i in *.png;do echo convert -resize 1024X768 "$i" "${i/.png}.jpg";done
Run Code Online (Sandbox Code Playgroud)

当它的输出看起来不错时,删除echo并进行转换,

for i in *.png;do convert -resize 1024X768 "$i" "${i/.png}.jpg";done
Run Code Online (Sandbox Code Playgroud)

替代findrename

如果你想避免 bash 中的循环,你可以使用find,

find -maxdepth 1 -name "*.png" -exec echo convert -resize 1024X768 {} {}.jpg \;
Run Code Online (Sandbox Code Playgroud)

当它的输出看起来不错时,删除 echo 并进行转换,

find -maxdepth 1 -name "*.png" -exec convert -resize 1024X768 {} {}.jpg \;
Run Code Online (Sandbox Code Playgroud)

之后,您可以使用rename使目标文件名更好(修剪笨拙的双扩展名)

rename -n s/.png.jpg$/.jpg/ *.png.jpg
Run Code Online (Sandbox Code Playgroud)

当它的输出看起来不错时,删除-n并进行真正的重命名,

rename s/.png.jpg$/.jpg/ *.png.jpg
Run Code Online (Sandbox Code Playgroud)

可能有一些方法可以一步完成此操作(无需重命名),但我不知道如何操作。也许有人会插话并描述一种方法。