我有一组json文件。每个文件包含一个json对象,并且它们都具有相同的架构。我想将文件重命名为json中的一个字段。我怎样才能做到这一点?
我想出了这个解决方案:
find . -name '*.json' | xargs -i mv {} $(cat {} | jq '.billingAccountList[0]' | tr -d \").json
但这是行不通的,因为cat
它试图解释{}。我希望xargs可以解释它。它给了我这个错误:
cat: {}: No such file or directory
使用循环逐个处理文件。
例如,使用while read
:
find . -name '*.json' | while read fname; do
newname=$(jq -r '.billingAccountList[0]' "${fname}").json
mv "${fname}" "${newname}"
done
for
可能可以使用,但是它对文件名中的空格更为敏感:
for fname in $(find . -name '*.json'); do
... (same as above) ...
另请注意,由于原始路径已被剥离,因此您正在将文件移动到当前目录中,因此,如果要保留目录结构,请执行以下操作:
find . -name '*.json' | while read fname; do
fdir=$(dirname "${fname}")
newname=$(jq -r '.billingAccountList[0]' "${fname}").json
mv "${fname}" "${fdir}/${newname}"
done
更新:使用jq -r
@steeldriver建议。谢谢!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句