파일 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경로 이름 생성기가 루프 역할을 하는 반면, 짧은 예에서는 경로 이름이 와일드카드 패턴을 사용하여 생성된다는 것입니다(현재 디렉토리에서만).

관련된:

관련 정보