【发布时间】:2018-09-13 12:43:42
【问题描述】:
我正在尝试将 TIFF 图像文件的层次结构转换为 JPG,出于无聊,我想在一个文件中执行 find 和 ffmpeg。
所以我将find 设置为使用-s 标志调用sh,就像变薄一样:
#!/bin/sh
export IFS=""
find "$@" -iname 'PROC????.tif' -exec sh -s {} + << \EOF
for t ; do
ffmpeg -y -v quiet -i $t -c:v mjpeg ${t%.*}.jpg
rm $t
done
EOF
但是,目录层次结构中的文件太多了,并且找到了切碎的文件名数组,分成了几个小块,并且 sh -s 仅成功调用了第一个参数块。
问题是:如何将这样的体内命令提供给find 命令中的每个sh 调用?
更新
问题上的标签“heredoc”旨在接收不依赖外部文件或通过$0自引用的答案。它还旨在使任何文件名都不会经过字符串数组处理,例如使用 NUL 终止符或换行符填充,并且可以直接作为参数传递。
【问题讨论】: