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