我有一个由discord 生成的文件,其中包含大约8000 行curl 命令,其中大多数都彼此相似。问题是我无法编辑每一行并向每一行添加不同的输出语句。有没有办法让curl自动为文件分配一个不同的名称,这样它就不会覆盖以前的名称?
curl 'https://cdn.discordapp.com/emojis/585807750991183872.png?v=1' \
-H 'sec-fetch-mode: no-cors' -H 'accept-encoding: gzip, deflate, br' \
-H 'accept-language: en-US' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) discord/0.0.90 Chrome/76.0.3809.94 Electron/6.0.0 Safari/537.36' \
-H 'accept: image/webp,image/apng,image/*,*/*;q=0.8' \
-H 'referer: https://canary.discordapp.com/channels/584291323893383169/607165146476969984' \
-H 'authority: cdn.discordapp.com' \
-H 'cookie: __cfduid=d36533327b001d6036b90a8c278c91d491562662533' \
-H 'sec-fetch-site: same-site' \
--compressed \
--output emoji.png ;
该--output
语句是我添加的,因为我可以使用 sublime split intolines 功能来单独编辑每行的末尾。所有的结局都不包含--output
并停止于--compressed
(虽然我不知道是否有必要)
长话短说有没有办法让curl下载每个具有不同名称的文件?像file1
那时file 2
等等?
答案1
您可以编写一个 shell 函数来放置包装器curl
并参数化您的调用,例如:
fetch_via_curl() {
# $1 is URL to fetch
# $2 is referrer string
# $3 is cookie string
# $4 is output file name
curl_fmt="$(cat << 'EOF'
curl '%s' \
-H 'sec-fetch-mode: no-cors' -H 'accept-encoding: gzip, deflate, br' \
-H 'accept-language: en-US' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) discord/0.0.90 Chrome/76.0.3809.94 Electron/6.0.0 Safari/537.36' \
-H 'accept: image/webp,image/apng,image/*,*/*;q=0.8' \
-H 'referer: %s' \
-H 'authority: cdn.discordapp.com' \
-H 'cookie: %s' \
-H 'sec-fetch-site: same-site' \
--compressed \
--output '%s' ;
EOF
)"
file_num=
while [ -f "$4${file_num:+.${file_num}}" ]
do
file_num=$(($file_num+1))
done
curl_cmd="$(printf $curl_fmt "$1" "$2" "$3" "$4${file_num:+.${file_num}}")"
sh -c "$curl_cmd"
}
然后使用如下语法获取文件:
fetch_via_curl \
"https://cdn.discordapp.com/emojis/585807750991183872.png?v=1" \
"https://canary.discordapp.com/channels/584291323893383169/607165146476969984" \
"__cfduid=d36533327b001d6036b90a8c278c91d491562662533" \
"emoji.png"
如果emoji.png
不存在,文件将保存到emoji.png
.如果确实存在,则文件将保存到emoji.png.N
N 是导致文件名不存在的最小正整数的位置。