搜索并下载多个目录中的特定文件

搜索并下载多个目录中的特定文件

我正在尝试让 WGET 下载名为 的特定文件5200r.img。该文件位于以下地址的三个目录之一中:

https://pds-imaging.jpl.nasa.gov/data/galileo/galileo_orbiter/go_0020/e14/europa/

这些目录为c044094、、c044095c044098

我如何让 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/*并分别使用"twowords"。通常这不是您想要的。在这种情况下,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

相关内容