bash:查找目录中的所有文件,并使用名称的一部分作为命令的参数

时间:2013-08-07 08:15:25

标签: bash find

我需要将所有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;只是改为。

我不需要递归处理目录。

1 个答案:

答案 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的解释器已更改。)