mkdir -p error_folder &&
for json in ./*.json; do
if jq -e '..|select(type == "array" and length == 0)' <"$json" >/dev/null
then
mv "$json" error_folder/
fi
done
Esta é mais ou menos a mesma abordagem que Roman tomou em sua resposta , mas usa um% diferente de co_de expressão%.
A expressão jq
irá recriar a estrutura JSON completa e selecionar todos os bits dela que sejam matrizes de comprimento zero (em qualquer lugar, em qualquer profundidade).
Se o ..|select(type == "array" and length == 0)
for bem-sucedido, então select()
sairá com um status de saída zero (êxito), o que significa que o documento JSON contém um array vazio em algum lugar (ou o arquivo está totalmente vazio). Isso aciona a movimentação do documento para jq
no script.
Nos comentários abaixo, fica claro que o usuário está interessado apenas na matriz error_folder
.
Meu código com uma expressão WarehouseActivity
modificada:
mkdir -p error_folder &&
for json in ./*.json; do
if jq -e '..|select(type == "object" and has("WarehouseActivity") and (.WarehouseActivity|length) == 0)' <"$json" >/dev/null
then
mv "$json" error_folder/
fi
done