我需要将所有jpg文件放在一个目录中,并对每个文件执行以下命令:
mycommand -in <imagebasename>.jpg -out <imagebasename>.tif --otherparam paramvalue
我想到了:
find . -name "*.jpg" -exec mycommand -in {} -out {}.tif --otherparam paramvalue\;
但是这会将“./<imagebasename>.jpg”之类的内容传递给mycommand。 我需要传递&lt; imagebasename&gt;只是改为。
我不需要递归处理目录。
答案 0 :(得分:3)
尝试:
find . -name "*.jpg" -exec sh -c 'mycommand -in $0 -out "${0%.*}.tif" --otherparam paramvalue' {} \;
这会将mycommand -in <imagebasename>.jpg -out <imagebasename>.tif --otherparam paramvalue
形式的命令传递给-exec
。
编辑:要删除前导./
,您可以说:
find . -name "*.jpg" -exec bash -c 'f={}; f=${f/.\//}; echo mycommand -in "${f}" -out "${f%.*}.tif" --otherparam paramvalue' {} \;
(请注意-exec
的解释器已更改。)