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"
我正在 运行 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"