URL을 컬링하고 다음과 같은 파일로 출력하는 스크립트를 만들고 있습니다.
curl http://example.com/$1 > $1
포함되지 않은 항목을 무시하도록 하는 방법이 있습니까 <head>
? 물론 다음과 같이 할 수 있습니다.
web="$(curl http://example.com/$1)"
if $(echo "$web" | grep -q "<head>"); then
printf "$web" > "$1"
fi
하지만 이 스크립트는 여러 번 실행될 수 있으므로 시간을 절약하고 싶습니다.
답변1
파일에 저장하고 태그가 포함되어 있지 않으면 태그를 제거하세요.
curl "http://example.com/$1" >"$1"
! grep -qF '<head>' "$1" && rm "$1"
아니면 좀 더 복잡하게 만들고 싶다면,
if curl "http://example.com/$1" | tee "$1" | ! grep -qF '<head>'
then
rm "$1"
fi
아니면모두먼저 얻고,그 다음에생성된 파일을 찾아보고 삭제합니다.
mkdir outdir # assuming this is not pre-existing
# iterates over all positional parameters
for path do
curl "http://example.com/$path" >outdir/"$path"
done
find outdir -type f ! -exec grep -qF '<head>' {} \; -delete
그러나 이는 알려진 모든 파일을 고정 경로 아래로 가져오려는 경우에만 작동합니다.
답변2
다음을 수행할 수 있습니다.
grep -hIz '<head>' < <(curl -s "http://example.com/$1") > "$1" || rm "$1"
이렇게 하면 모든 출력이 억제됩니다.~하지 않는 한<head>
어떤 경우에 인쇄할지 포함됩니다 .모두산출. 일치하는 항목이 없으면 어쨌든 빈 파일이 생성되므로 삭제해야 합니다.
답변3
재미로:
curl "http://example.com/$1" | tee temp | grep -q derp && cat temp; rm temp
컬 출력을 파일에 저장하고 출력을 grep으로 파이프한 다음, grep은 derp
출력을 검색하고, 발견되면 컬 명령의 내용을 stdout으로 출력합니다. derp
찾을 수 없으면 스크립트 출력이 없습니다. 그런 다음 임시 파일이 삭제됩니다.
bash
명령의 출력을 조건부로 버퍼링할 수 있는 방법이 없기 때문에 파일에 "버퍼링"하지 않고 이 작업을 수행할 수 있는지 확실하지 않습니다 .