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: