shell 如何使用json格式并覆盖多个文件?

x33g5p2x  于 2023-02-24  发布在  Shell
关注(0)|答案(2)|浏览(134)

我有几个未格式化的json文件,我想"美化"一下,使它们更易于阅读。我通常对单个文件进行美化的方法是:

python -m json.tool < infile > outfile

但是对于一些文件,我还没有找到一种方法来处理它们,并用新的"漂亮" json覆盖同一个文件。
我得到的最接近的是:

find ./ -type f -exec python -m json.tool {} \;

但是它会将所有内容打印到标准输出,这很好,但并不是最佳的,这取决于您查看的文件数量。有没有办法让上面的命令用美化后的json覆盖这些文件?
文件名为:消息1.json、消息2.json等等。
先谢了

kxxlusnw

kxxlusnw1#

尝试:

find . -type f -exec sh -c 'python -m json.tool $0 > $0.pretty' {} \;

详细说明见https://stackoverflow.com/a/12965441/4886927
这样,原始文件将被新文件覆盖:

find . -type f -exec sh -c 'python -m json.tool < $0 > /tmp/pretty.json && mv  /tmp/pretty.json $0' \;
tcbh2hod

tcbh2hod2#

这与已经被接受的答案非常相似,但是它使用sponge(在debian上,这是moreutils包的一部分)来避免在/tmp中创建一个中间文件:

find . -type f -name '*.json' -exec sh -c 'python3 -m json.tool < $0 | sponge $0' {} \;

相关问题