我正在尝试让 WGET 下载名为 的特定文件5200r.img
。该文件位于以下地址的三个目录之一中:
https://pds-imaging.jpl.nasa.gov/data/galileo/galileo_orbiter/go_0020/e14/europa/
这些目录为c044094
、、c044095
和c044098
。
我如何让 WGET 搜索这三个目录中的每一个并5200r.img
下载它?
答案1
#!/bin/bash
address='https://pds-imaging.jpl.nasa.gov/data/galileo/galileo_orbiter/go_0020/e14/europa'
possibilities=( c044094 c044095 c044098 )
file='5200r.img'
for possibility in "${possibilities[@]}"
do
wget "$address/$possibility/$file" && break
done
脚本将构建完整的 URL 并逐一尝试。第一次成功下载将退出(break
)循环。
您已标记狂欢所以我用数组来存储可能性。更便携的版本可能是:
#!/bin/sh
address='https://pds-imaging.jpl.nasa.gov/data/galileo/galileo_orbiter/go_0020/e14/europa'
possibilities="c044094 c044095 c044098"
file='5200r.img'
for possibility in $possibilities
do
wget "$address/$possibility/$file" && break
done
它之所以有效,是因为单词拆分和路径名扩展会$possibilities
生成您想要的内容;但这只是因为您的可能性“足够好”。一般来说(忘记 URL)您可能想要处理包含*
、?
、空格、引号等的可能性。此代码
possibilities='/etc/* "two words" foo'
for possibility in $possibilities
do …
将扩展/etc/*
并分别使用"two
和words"
。通常这不是您想要的。在这种情况下,Bash 中的数组非常好。如果您需要解决方案sh
(没有数组概念),请考虑这种方法:
#!/bin/sh
while IFS= read -r possibility; do
printf '%s\n' "$possibility"
# or whatever you want to do
done << EOF
/etc/*
*.???
multiple words with spaces
leading spaces
" quotes '
EOF
上面的代码片段中5200r.img
是硬编码的。使用file="$1"
而不是file='5200r.img'
,这样你就可以方便地下载其他文件,如下所示:
./name_of_script 4852r.img