文字列が一致する場合にのみファイルに出力するOneliner(bash)?

文字列が一致する場合にのみファイルに出力するOneliner(bash)?

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

ただし、これはすべての既知のファイルを固定パスの下にインポートしたい場合にのみ機能します。

おすすめ記事