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