带有 404 检测的多个 cURL 下载

nat*_*ome 1 bash shell curl http-status-code-404

我正在尝试编写一个 shell 脚本,使用 cURL 下载文件并检测 url 是否导致 404 错误。如果 url 是 404,那么我想将 url 链接或文件名保存到文本文件中。

url 格式为http://server.com/somefile[00-31].txt

我一直在搞乱我在谷歌上找到的内容,目前有以下代码:

#!/bin/bash

if curl --fail -O "http://server.com/somefile[00-31].mp4"
then
  echo "$var" >> "files.txt"    
else
  echo "Saved!"
fi
Run Code Online (Sandbox Code Playgroud)

den*_*svm 7

#!/bin/bash

URLFORMAT="http://server.com/somefile%02d.txt"

for num in {0..31}; do
    # build url and try to download
    url=$(printf "$URLFORMAT" $num)
    CURL=$(curl --fail -O "$url" 2>&1)

    # check if error and 404, and save in file
    if [ $? -ne 0 ]; then
        echo $CURL | grep --quiet 'The requested URL returned error: 404'
        [ $? -eq 0 ] && echo "$url" >> "files.txt"
    fi

done
Run Code Online (Sandbox Code Playgroud)

这是使用 URL 参数的版本:

#!/bin/sh

for url in "$@"; do
    CURL=$(curl --fail -O "$url" 2>&1)
    # check if error and 404, and save in file
    if [ $? -ne 0 ]; then
        echo $CURL | grep --quiet 'The requested URL returned error: 404'
        [ $? -eq 0 ] && echo "$url" >> "files.txt"
    fi
done
Run Code Online (Sandbox Code Playgroud)

您可以这样使用: sh download-script.sh http://server.com/files {00..21}.png http://server.com/otherfiles {00..12}.gif

范围扩展将在 bash shell 上运行。