bash 并行命令中的字符串替换

bash string replacement in parallel command

我正在 运行 gdalinfo 命令并行从 *.tif 个文件中获取统计数据

find *tif -printf "%f\n" | parallel -j 5 "/usr/local/bin/gdalinfo -mm -stats -hist -json {} > {}.json"

{} 将被正在处理的文件替换,例如SRTM.tif,因此输出文件名为:SRTM.tif.json

如何在 {} 上进行字符串替换?

在 Bash 中使用循环,我通常会 ${f%.tif}.json 但它不起作用(我们没有 bash 变量)并且也尝试过 awk 但没有成功。

parallel中,{.}是没有扩展名的输入行。所以用它代替 {}。如果您真的想进行复杂的字符串操作,请使用 {= perl expression=}.

您可以找到类似

的 tif 文件
find . -name "*.tif" -print | cut -d "." -f1 |
   parallel -j 5 "/usr/local/bin/gdalinfo -mm -stats -hist -json {}.tif > {}.json"

编辑:或者,根据其他回复中的建议:

find . -name "*.tif" -print | 
   parallel -j 5 "/usr/local/bin/gdalinfo -mm -stats -hist -json {.}.tif > {.}.json"