![如何查找+转换这些.gif?](https://linux22.com/image/113145/%E5%A6%82%E4%BD%95%E6%9F%A5%E6%89%BE%2B%E8%BD%AC%E6%8D%A2%E8%BF%99%E4%BA%9B.gif%EF%BC%9F.png)
我想要find
一个 .gif 文件列表,convert
它们都是带有文件名标识符的图像系列png
,并将这些系列循环起来这乳胶。我在这里思考如何组合find
+ convert
。
我可以通过以下方式列出 .gif 文件:
find -L *.gif -type f
我可以将 .gif 图像转换为一系列 png 图像,但没有自己的标识符
# TODO take filename from find list and give to convert and to the resulted filename convert -coalesce giphy.gif out%05d.png
伪代码{}.png
试图说从文件名列表中获取新文件名,但我认为它无法工作,因为该列表还包含.gif
扩展名,因此应该将其删除:
find -L *.gif -type f -exec convert -coalesce {} {}.png +
操作系统:Debian 8.7
答案1
使用 zsh
autoload -U zmv # best in ~/.zshrc
splitgif() convert -coalesce "$@"
zmv -p splitgif './(***/)(*).gif(#q-.)' './${1//\%/%%}${2//\%/%%}%05d.png'
请注意,需要./
避免gif:whatever.gif
例如命名的文件出现问题,并${1//\%/%%}
转义%
可能在文件路径中找到的字符。
***
与相同,**
但在像您一样沿着目录树下降时遵循符号链接-L
(#q...)
全局限定符-
:对符号链接的目标应用以下检查以获取符号链接(stat()
相反lstat()
),就像您的-L
..
:仅常规文件(相当于-type f
)
答案2
Steeldriver 在评论中给出了很好的答案
find -L . -name '*.gif' -execdir sh -c 'for f;
do convert -coalesce "$f" "${f%.gif}%05d.png";
done' sh {} +