【功能强大】使用csh脚本批量下载葵花卫星数据

脚本说明

  • 最近需要处理葵花卫星的气溶胶属性产品,于是使用csh脚本写了一个批量下载葵花卫星数据的脚本
  • 用户可以自定义下载的开始日期结束日期,这些作为运行csh脚本时的输入参数
  • 用户可以自定义下载的小时分钟,避免下载不必要的数据,浪费时间和计算资源
  • 用户可以自定义下载的产品信息,需要根据官网的文件路径和文件名格式修改代码
  • 支持时区转换
  • 多进程并行运行,下载速度极快!
  • 需要登录官网注册账号密码(注册账号网址:https://www.eorc.jaxa.jp/ptree/registration_top.html

脚本用法

chmod 755 download.csh # download.csh 为保存的文件名,将文件变为可执行程序
./download.csh 2018 03 27 2018 03 31 |& tee download.log # 运行脚本,下载2018年3月27日至2018年3月31日的数据

脚本代码

#!/bin/csh

# =================================================================================================
# Functions implemented:
#	- Download products from JAXA Himawari-8
# Script Usage:
#	- ./download.csh 2018 03 27 2018 03 31 |& tee download.log
# Author information:
#	- Created by ZHANG Hua (zhangh20011114@gmail.com), 2024/6/16.
# =================================================================================================

# >>> Set output directory
set OUT_HOME = ../origin

# >>> Set ftp server information
set HOST     = ftp.ptree.jaxa.jp
set PORT     = 21
set USERNAME = *********** # Replace with your username
set PASSWORD = *********** # Replace with your password

# >>> Set product information
set level   = L2
set type    = ARP
set version = 030

set REMOTE_HOME = ftp://${USERNAME}:${PASSWORD}@${HOST}:${PORT}/pub/himawari/${level}/${type}/${version}

# >>> Set start date and end date
set year_start	= $argv[1]	# 2024
set month_start	= $argv[2]	# 02
set day_start	= $argv[3]	# 01
set year_end	= $argv[4]	# 2024
set month_end	= $argv[5]	# 02
set day_end		= $argv[6]	# 29

# >>> Set the hours and minutes for daily downloads
set hour_start	=  9					# This can be changed according to personal demand
set hour_end	= 18					# This can be changed according to personal demand
set minutes		= (00 10 20 30 40 50)	# This can be changed according to personal demand

# >>> Transform local time to UTC whether or not

set doTimeTrans	= 1

if (${doTimeTrans}) then
	set HOUR_TRANS = -8 # CST to UTC
else
	set HOUR_TRANS =  0
endif

# DAY_MAX can be changed, and it serves to prevent
# the entry of many days by mistake.

set DAY_MAX = 31

# >>> Echo start date and end date

set date_start = ${year_start}-${month_start}-${day_start}
set date_end   = ${year_end}-${month_end}-${day_end}

echo "Start date: ${date_start}"
echo "End   date: ${date_end}"

# >>> Test the number of days to be processed

@ DAY_NUM = (`date -ud ${date_end} +%s` - `date -ud ${date_start} +%s`) / 86400 + 1

if (${DAY_NUM} > ${DAY_MAX} || ${DAY_NUM} < 0) then
	echo "Error: The date is illegal."
	if (${DAY_NUM} > ${DAY_MAX}) then
		echo "Error: The number of days to be processed exceeds ${DAY_MAX}."
		exit 1
	else
		echo "Error: The end date precedes the start date."
		exit 1
	endif
endif

# >>> Download file daily cycle

set day_second_start = `date -ud ${date_start} +%s`
set day_second_end   = `date -ud ${date_end} +%s`

set day_second_now = ${day_second_start}
while (${day_second_now} <= ${day_second_end})
	
	set date_now = `date -ud @${day_second_now} +%Y-%m-%d`
	echo "Working date: ${date_now}"
	
	set hour_now = ${hour_start}
	while (${hour_now} <= ${hour_end})
		
		foreach MM (${minutes})
			
			@ minute_second_now_loc = ${day_second_now} + ${hour_now} * 3600 + ${MM} * 60
			@ minute_second_now_utc = ${minute_second_now_loc} + ${HOUR_TRANS} * 3600
			
			set yyyymm = `date -ud @${minute_second_now_utc} +%Y%m`
			set yyyymmdd_hhmm = `date -ud @${minute_second_now_utc} +%Y%m%d_%H%M`
			set dd = `date -ud @${minute_second_now_utc} +%d`
			set hh = `date -ud @${minute_second_now_utc} +%H`
			
			set out_path = ${OUT_HOME}/${level}/${type}/${version}/${yyyymm}
			if (! -d ${out_path}) then
				mkdir -p ${out_path}
			endif
			
			set remote_path = ${REMOTE_HOME}/${yyyymm}/${dd}/${hh}
			set filename = NC_H08_${yyyymmdd_hhmm}_${level}${type}${version}_FLDK.02401_02401.nc
			set syscmd = "wget -P ${out_path} ${remote_path}/${filename}"
			echo "${syscmd}"
			${syscmd} & # Multiprocess parallelism
			sleep 0.5   # Don't delete it! # Wait to connect to ftp server
			
		end
		
		@ hour_now ++
		
	end
	
	@ day_second_now = ${day_second_now} + 24 * 3600
	
end

wait # Wait for all process to complete

echo "Successfully download all files!"
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值