wget路径通配符使用求助,递归下载.nc文件遇多问题
解决wget递归下载GOES netCDF文件的问题
一、用wget实现通配符路径匹配并排除CSV目录
要递归下载https://satdat.ngdc.noaa.gov/sem/goes/data/full/*/*/*/netcdf/*.nc路径下的所有.nc文件,同时排除CSV目录,可通过wget的目录过滤和文件匹配参数实现,无需手动循环单个路径:
wget -r -nH -np -x --force-directories -e robots=off \ --include-directories="/sem/goes/data/full/*/*/*/netcdf" \ --exclude-directories="/sem/goes/data/full/*/*/*/csv" \ --accept="*.nc" \ https://satdat.ngdc.noaa.gov/sem/goes/data/full/
参数说明:
-r:开启递归下载-nH:不生成以主机名为前缀的目录-np:不回溯到上级目录(避免下载无关的父级内容)-x:保持远程服务器的目录结构--force-directories:强制创建所需的目录层级-e robots=off:忽略服务器的robots.txt限制--include-directories:指定仅包含符合匹配规则的netcdf目录路径--exclude-directories:排除所有csv目录路径--accept:仅下载后缀为.nc的文件
二、解决1981年01-09月无法下载的问题
你之前的循环命令仅能下载10-12月,大概率是因为shell对带前导零的序列支持问题,或者目标服务器的月份目录实际命名为1-9而非01-09。可通过以下两种方式修复:
方法1:用printf生成标准两位月份格式
确保循环生成的月份始终是两位数字,适配服务器目录命名:
for i in $(printf "%02d " {1..12}); do wget -r -nH -np -x --force-directories -e robots=off \ https://satdat.ngdc.noaa.gov/sem/goes/data/full/1981/${i}/goes02/netcdf/ done
方法2:直接用wget过滤1981年的目标路径(无需循环)
跳过手动循环,让wget自动匹配1981年所有月份的netcdf目录:
wget -r -nH -np -x --force-directories -e robots=off \ --include-directories="/sem/goes/data/full/1981/*/goes02/netcdf" \ --exclude-directories="/sem/goes/data/full/1981/*/goes02/csv" \ --accept="*.nc" \ https://satdat.ngdc.noaa.gov/sem/goes/data/full/1981/
如果服务器上1981年的月份目录是不带前导零的1-9,只需把--include-directories中的路径调整为匹配不带前导零的格式即可。
内容的提问来源于stack exchange,提问作者Roland
相关产品推荐
相关产品推荐

