Localizar arquivo json verificar se gerado ou executado

1

Eu quero encontrar arquivos * .json2, verifique se eles são executados se não executar o POST.

Eu tenho

1.json2
2.json2  2.json2.ml
3.json2  3.json2.ml

Eu uso este comando

find . -type f -name '*.json2' | if [{}.ml]; then -exec sh -c 'curl -X POST -H "Content-Type: application/json" -d @{} https://api.myweb.com/api > {}.ml' \;

Eu quero executar apenas o arquivo não tem extensão ml. Thx

    
por Jess 29.08.2018 / 04:37

2 respostas

-1

Você já considerou usar xargs ?

find . -type f -name '*.json2' | xargs bash -c 'for fname; do if [ ! -e ${fname}.ml ]; then curl -X POST -H "Content-Type: application/json" -d @${fname} https://api.myweb.com/api > ${fname}.ml; fi; done' bash

Quanto a esse bash , é um 'truque' que acabei de aprender na página de wikipedia do xargs . (Tem que estar lá ou o primeiro argumento não é processado.)  Eu admito que nunca usei isso antes, mas testei com um comando echo e alguns arquivos de teste, e parece fazer o que você quer.

    
por 29.08.2018 / 05:38
0
find . -type f -name '*.json2' -exec sh -c '
    for pathname; do
        [ -e "$pathname.ml" ] && continue
        curl -X POST -H "Content-Type: application/json" -d @"$pathname" https://api.myweb.com/api >"$pathname.ml"
    done' sh {} +

Isso localizaria todos os arquivos regulares cujos nomes de arquivos correspondam ao padrão *.json2 dentro ou abaixo do diretório atual. Para lotes desses arquivos, um script de shell curto é executado. Este script testa, para cada nome de caminho dado a ele por find , se há um arquivo .ml correspondente ao nome do caminho. Se não houver, seu comando curl será executado.

Isso pode ser simplificado no seguinte se todos os arquivos estiverem localizados apenas no diretório atual:

for pathname in ./*.json2; do
    [ -e "$pathname.ml" ] && continue
    curl -X POST -H "Content-Type: application/json" -d @"$pathname" https://api.myweb.com/api >"$pathname.ml"
done

Note que isto é essencialmente exatamente o mesmo loop que no script chamado por find . A única diferença é que, no primeiro exemplo, find age como um gerador de nome de caminho para o loop, enquanto no exemplo mais curto, os nomes de caminho são gerados usando um padrão globbing (e somente a partir do diretório atual).

Relacionados:

por 29.08.2018 / 14:37