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