파일 json 찾기 생성 또는 실행 여부 확인

파일 json 찾기 생성 또는 실행 여부 확인

*.json2 파일을 찾고 싶습니다. POST가 실행되지 않으면 해당 파일이 실행되었는지 확인하세요.

나는 가지고있다

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

나는 이 명령을 사용한다

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' \;

ml 확장자가 없는 파일만 실행하고 싶습니다. 고마워

답변1

사용을 고려해 보셨나요 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

그 후행에 관해서는 bash제가 방금 배운 '트릭'입니다.xargs 위키피디아 페이지. (그렇지 않으면 첫 번째 인수가 처리되지 않습니다.) 이전에 사용한 적이 없다는 것을 인정하지만 echo 명령과 일부 테스트 파일을 사용하여 테스트했는데 원하는 대로 작동하는 것 같습니다.

답변2

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 {} +

*.json2이는 파일 이름이 현재 디렉토리 내부 또는 그 아래의 패턴과 일치하는 모든 일반 파일을 찾습니다 . 이러한 파일 배치의 경우 짧은 쉘 스크립트가 실행됩니다. 이 스크립트는 에 의해 제공된 각 경로 이름에 대해 해당 경로 이름에 해당하는 파일이 find있는지 테스트합니다. .ml없으면 curl명령이 실행됩니다.

모든 파일이 현재 디렉터리에만 있는 경우 이는 다음과 같이 단순화될 수 있습니다.

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

이는 본질적으로정확히에 의해 호출된 스크립트와 동일한 루프입니다 find. 유일한 차이점은 첫 번째 예에서는 find루프에 대한 경로 이름 생성기 역할을 하는 반면, 더 짧은 예에서는 경로 이름이 글로빙 패턴을 사용하여 (현재 디렉터리에서만) 생성된다는 것입니다.

관련된:

관련 정보