我有一组 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
:使用
for
可能是可能的,但它对文件名中的空格更敏感:另请注意,您正在将文件移动到当前目录中,因为原始路径正在被剥离,因此如果您想保留目录结构:
更新:
jq -r
按照@steeldriver 的建议使用。谢谢!您应该能够使用
jq -r
输出原始(未引用)字符串 - 而不是用tr
此外,我将假设您想要重命名文件相对于它们的父目录(例如,如果值是
.billingAccountList[0]
,那么新名称应该是而不是),并且您的实现有一个path/to/file.json
foo
path/to/foo.json
foo.json
find
-execdir
所以我会做类似的事情
或(至少使用 GNU
find
)更有效echo
一旦你对它做正确的事情感到满意,就删除它。使用
zsh
'szmv
(为了更好地处理冲突):-n
(高兴时删除)。