ZSH:从文件列表中剥离路径、文件名和扩展名以传递命令

ZSH:从文件列表中剥离路径、文件名和扩展名以传递命令

命令的语法convert图像魔术师

convert source_filename.ext1  destination_filename.ext2

我想使用 zsh 向其提供文件夹中的文件path_to_source并输出结果(具有相同名称的文件,但带有不同的扩展名)文件夹下path_to_destination

我相信我可以使用findandxargs来实现这一点,但我没有想出任何有效的方法。我还认为 ZSH 可能有一些对此有用的内置函数。任何指示将不胜感激。

笔记:据我所知,convert没有处理一批文件的本机方法,所以我需要一个一个地提供文件。无论哪种情况,我都有兴趣解决使用这些参数逐个文件提供命令文件的问题。

答案1

for x in /path/to/source/**/*.ext1; do convert $x ${x:r}.ext2 done

r${x:r}一个历史修改器。有一个简短的形式for可以节省一些字符。

for x (/path/to/source/**/*.ext1) convert $x ${x:r}.ext2

答案2

我会这样做:

cd path_to_source
find . | sed 's/.ext1$//' | xargs convert {}.ext1 ../path_to_destination/{}.ext2

答案3

您可以使用选项(从 开始)批量处理文件并mogrify从一种格式转换为另一种格式,以指定在其中输出处理后的图像的不同目录:-pathimagemagick v6.2.0

mogrify -path /path/to/dest_filename -format ext2 /path/to/source_filename/*.ext1

所以例如

mogrify -path /home/myjpgs -format jpg /media/images/*.png

将转换目录.png中的所有图像/media/imagesjpg保持相同的文件名(仅扩展名更改)并将生成的图像保存到/home/myjpgs

相关内容