InSAR—ASF批量下载工具 ASF Sentinel-1 数据批量下载、自动分类与下载统计附加下载地址本文介绍一套适用于 Windows、Ubuntu 和 Docker 的 ASF Sentinel-1 数据下载软件。它可以按照数据类型、升降轨和卫星平台筛选数据自动整理下载目录并为下载结果生成日志和统计表。摘要从 ASF Vertex 导出大量 Sentinel-1 数据后手动逐个下载、整理目录和检查完整性非常耗时。本工具可以根据 ASF CSV 中的数据类型、升降轨方向和卫星平台自动筛选并分类保存数据同时生成下载日志与去重统计表。本文将详细介绍运行环境和文件准备CSV 文件要求SLC、RAW、GRD_HD 和元数据下载参数升轨、降轨与卫星平台的区别Ubuntu、Docker 和 Windows 下的运行方法自动生成的目录、日志和统计文件已有文件、下载中断和失败文件的处理对已经下载的数据重新生成统计表常见提示与问题排查关键词ASF、Sentinel-1、InSAR、SLC、RAW、GRD、Earthdata、Docker、批量下载一、获取软件包https://github.com/kdqSoldier/insar-asf-downloader/releases/tag/v1.0**软件包下载地GitHub项目https://github.com/kdqSoldier/insar-asf-downloader/releases/tag/v1.0百度网盘会员不限速https://pan.baidu.com/s/1Zuo-MeMIfbeKHVf2j8AXFw提取码s7hs夸克网盘会员不限速https://pan.quark.cn/s/6394b80f9b29提取码7PLJ链接如失效文件缺失可留言或 kongdeqianght163.com 压缩软件包操作系统软件包文件Windows 64位ASF_downloader_windows_x86_64.zipLinux 64位ASF_downloader_linux_x86_64.tar.gz两个程序的用途如下程序用途download_slcdata读取 ASF CSV、筛选数据、下载文件、自动分类、写入日志和下载统计generate_download_statistics扫描已经下载的数据根据原始 ASF CSV 重新生成统计表不执行网络下载Windows 用户应使用.exe文件Ubuntu、常见 Linux 服务器和基于 glibc 的 Docker 容器应使用 Linux 文件。Linux 软件面向 x86_64 架构不适用于 ARM64也不建议直接用于 Alpine Linux 的 musl 环境。Windows 用户使用系统自带的“全部解压缩”功能解压 ZIP不要直接在 ZIP 预览窗口中运行程序。解压后包含download_slcdata.exe generate_download_statistics.exe SHA256SUMS.txtLinux 解压tar-xzfASF_downloader_linux_x86_64.tar.gz sha256sum-cSHA256SUMS.txtchmodx download_slcdata generate_download_statistics解压后的 Linux 软件包包含download_slcdata、generate_download_statistics和SHA256SUMS.txt。如果校验成功终端会对两个程序分别显示OK。Linux 可执行权限可能在通过 FTP、SMB、NFS、Windows 文件系统或部分网页上传工具传输后丢失。如果执行程序时看到bash: ./download_slcdata: Permission denied先查看文件权限ls-ldownload_slcdata generate_download_statistics如果权限开头类似-rw-rw-rw-说明没有执行权限。执行chmod755download_slcdata generate_download_statistics正常权限应类似-rwxr-xr-x不要使用bash download_slcdata因为它是 Linux 二进制程序不是 Shell 程序。建议将对应系统的两个可执行文件和 ASF CSV 放在同一个工作目录中。Linuxasf_download/ ├── download_slcdata ├── generate_download_statistics └── download.csvWindowsasf_download\ ├── download_slcdata.exe ├── generate_download_statistics.exe └── download.csv本文统一把 ASF 导出的 CSV 命名为download.csv实际使用其他文件名也可以但命令和生成的数据集目录名称会随之改变。此文件可以直接使用“search.asf.alaska.edu”导出的CSV表单文件不需修改。二、运行环境1. 不需要安装 Python软件包基于 Python 开发但已经制作成单文件可执行程序。普通用户不需要安装 Python、pip、Conda 或第三方库。Linux 首次使用时需要增加执行权限chmodx download_slcdata generate_download_statisticsWindows 用户可以直接在 PowerShell 或命令提示符中运行.exe。2. 验证软件包可选软件包中包含SHA256SUMS.txt。SHA-256 用于确认下载后的程序没有发生变化如果程序被替换或修改哈希值也会改变。Linux 中计算sha256sum download_slcdata generate_download_statisticsWindows PowerShell 中计算Get-FileHash.\download_slcdata.exe-Algorithm SHA256Get-FileHash.\generate_download_statistics.exe-Algorithm SHA256将结果与SHA256SUMS.txt逐项比较。只要有一个字符不同就不要继续运行应重新从可信来源下载软件包。SHA-256 的作用是检测文件是否发生变化不是数字签名。Windows 可能对没有商业代码签名证书的软件显示 SmartScreen 提醒。不要直接关闭系统安全功能应先确认软件来源和 SHA-256再决定是否运行。3. Earthdata 账号下载 ASF 数据需要有效的 NASA Earthdata 账号并确保账号已经具备对应数据的访问权限、接受所需的使用协议。运行下载程序时终端会要求输入用户名和密码Username: Password (will not be displayed):输入密码时终端不显示字符这是正常的安全行为。程序不会把用户名、密码或登录 Cookie 写入日志。登录 Cookie 只在当前程序进程的内存中使用程序退出后不会继续复用。三、准备 ASF CSV在 ASF Vertex 中完成数据检索后导出包含下载 URL 和元数据的 CSV并将其放入程序工作目录。软件可以直接读取 Vertex 导出的 CSV不需要手动修改表头或内容。为了正常筛选、分类和统计CSV 至少需要包含以下字段字段用途URL下载地址和本地文件名来源Processing Level区分 SLC、RAW、GRD_HD 和元数据类型Ascending or Descending?区分升轨和降轨Acquisition Date生成数据集日期范围目录如果 CSV 还包含下列字段生成的统计表会更加完整Granule NamePlatformSensorBeam ModeOrbitPath NumberFrame NumberAcquisition Date、Start Time、End Time中心点和四角经纬度Size (MB)TemporalBaseline、PerpendicularBaselineBurst 和 Subswath 相关字段建议始终保留 ASF 原始 CSV。即使数据已经下载完成后续重新生成统计表仍然需要它。四、下载参数1. 数据类型参数程序提供六个布尔参数默认值全部为False参数对应数据默认值bool_slcSLC 影像Falsebool_rawRAW 原始数据Falsebool_grd_hdGRD_HD 数据Falsebool_metadata_slcSLC 元数据Falsebool_metadata_rawRAW 元数据Falsebool_metadata_grd_hdGRD_HD 元数据False必须至少将一个参数设置为True否则程序会提示没有选择下载类型并退出。例如bool_slcTrue只代表下载 SLC 影像并不自动包含 SLC 元数据。如果影像和元数据都需要应同时设置bool_slcTruebool_metadata_slcTrue2. 升降轨参数orbit_direction使用orbit_direction参数选择轨道方向参数含义orbit_directionascending只下载升轨数据orbit_directiondescending只下载降轨数据orbit_directionall同时下载升轨和降轨数据如果不传入该参数程序会在控制台询问[1] ASCENDING [2] DESCENDING [3] ALL参数名称和值不区分大小写。orbit_directionboth也表示同时选择升轨和降轨但建议统一使用all。在无人值守、Docker 后台任务或无法交互的环境中应明确传入orbit_direction。参数缺少值、重复出现或使用非法值时程序会显示英文错误并退出。3. 卫星平台参数satellite使用satellite参数选择平台参数含义satellites1a只下载 Sentinel-1Asatellites1c只下载 Sentinel-1Csatelliteall同时下载 Sentinel-1A 和 Sentinel-1C参数名称和值不区分大小写。satelliteboth也可以表示两个平台但建议统一使用all。如果没有提供该参数程序会询问[1] S1A (Sentinel-1A only) [2] S1C (Sentinel-1C only) [3] ALL (both Sentinel-1A and Sentinel-1C)satellite与orbit_direction会同时筛选。例如orbit_directionascending satellites1c表示只选择 Sentinel-1C 的升轨数据。在无人值守或无法交互的环境中应同时明确提供orbit_direction和satellite。如果satellite没有值、重复出现或者值不是s1a、s1c、all、both程序会显示英文错误并退出。4. 卫星平台与升降轨的区别需要特别注意S1A表示 Sentinel-1A 卫星平台S1C表示 Sentinel-1C 卫星平台ASCENDING表示升轨DESCENDING表示降轨卫星平台与轨道方向是两个独立的筛选条件。Sentinel-1A 和 Sentinel-1C 都可能包含升轨或降轨数据。例如satellites1a orbit_directiondescending表示只选择 Sentinel-1A 的降轨数据。五、常用下载命令以下命令均假设当前目录中存在download_slcdata download.csv下面第1至第5个示例使用 Linux 写法。Windows 用户将./download_slcdata替换为.\download_slcdata.exe后面的 CSV 和参数保持不变。1. 只下载升轨 SLC./download_slcdata download.csvbool_slcTrueorbit_directionascendingsatellites1a该命令不会下载 RAW、GRD_HD 或 SLC 元数据。2. 下载升轨 SLC 和对应元数据./download_slcdata download.csvbool_slcTruebool_metadata_slcTrueorbit_directionascendingsatellites1c3. 只下载降轨 RAW./download_slcdata download.csvbool_rawTrueorbit_directiondescendingsatellites1a4. 下载升轨和降轨 SLC./download_slcdata download.csvbool_slcTrueorbit_directionallsatelliteall5. 下载全部支持的数据类型./download_slcdata download.csvbool_slcTruebool_rawTruebool_grd_hdTruebool_metadata_slcTruebool_metadata_rawTruebool_metadata_grd_hdTrueorbit_directionallsatelliteall6. Windows 示例在 PowerShell 中进入工作目录cdD:\asf_download运行.\download_slcdata.exe download.csv bool_slcTrue bool_metadata_slcTrue orbit_directionascending satellites1c7. Docker 示例假设宿主机数据目录挂载到容器的/downloadscd/downloads ./download_slcdata download.csvbool_slcTrueorbit_directionascendingsatellites1a为了保证容器删除后数据仍然保留应将可执行文件、CSV 和下载目录放在宿主机绑定挂载或持久化卷中。Linux 可执行文件依赖 glibc 环境如果容器使用 Alpine Linux建议改用 Ubuntu 或 Debian 基础镜像。六、自动生成的目录结构程序会根据以下信息创建最外层数据集目录CSV 主文件名 最早获取日期 最晚获取日期例如输入文件为download.csvCSV 中包含一段日期范围的数据可能生成download_YYYYMMDD_YYYYMMDD/如果 CSV 中只有一个获取日期则可能生成download_YYYYMMDD/数据集内部按照以下三级目录分类数据类型 / 升降轨 / 卫星平台 / 数据文件完整示意download_YYYYMMDD_YYYYMMDD/ ├── README.md ├── download.log ├── download_statistics.csv ├── SLC/ │ ├── ASCENDING/ │ │ ├── S1A/ │ │ └── S1C/ │ └── DESCENDING/ │ ├── S1A/ │ └── S1C/ ├── RAW/ └── METADATA_SLC/这种结构避免不同年份、类型、轨道方向和卫星平台的数据全部堆放在同一个目录中。七、终端进度、速度和预计时间下载开始后终端会使用英文显示类似信息Download Plan Files: 10 Total Size: 40.00 GB Estimated Total Time: Calculating... (3/10) Downloading https://... File 3/10 | Current File: 850.00 MB / 4.00 GB (20.75%) | Current Speed: 12.00 MB/s | File ETA: 4m 30s | Total ETA: 45m 0s字段含义字段含义File 3/10当前是第3个文件共10个文件Current File当前文件已接收容量、总容量和完成百分比Current SpeedPython 进程最近统计周期实际收到的数据速度File ETA当前文件预计剩余时间Total ETA全部剩余任务预计时间速度会自动选择 B/s、KB/s、MB/s 或 GB/s不会强制使用过大的单位。如果最近一个统计周期没有收到新数据速度会显示Current Speed: 0.00 B/s程序显示的是 Python 应用层收到的有效文件数据不等同于系统网卡、Docker 虚拟网卡或宿主机物理网卡显示的总流量。TLS、HTTP 头、网络重传、缓存和统计时间窗口都可能造成数值差异。ETA 是动态估算值会随着网络速度、认证等待、服务器响应和重试情况变化。八、已有文件如何处理如果目标位置已经存在同名文件程序不会直接覆盖而会显示本地大小、远程大小及差异并给出选项[1] Skip [2] Overwrite [3] Skip all [4] Overwrite all [5] Quit含义如下选项作用Skip跳过当前文件Overwrite重新下载并替换当前文件Skip all本次运行中跳过后续所有已有同名文件Overwrite all本次运行中覆盖后续所有已有同名文件Quit退出程序程序等待输入时会倒计时15秒。如果没有输入默认选择Skip避免意外覆盖数据。重新下载时新内容会先写入临时文件完整下载后再替换目标文件降低下载中断损坏原文件的风险。九、下载日志与统计表的区别1. 下载日志数据集根目录中会生成与源 CSV 同主文件名的.log文件例如download.log日志记录每一次处理事件包括SUCCESS下载成功FAILED下载失败或大小校验失败SKIPPED已有文件被跳过数据类型、升降轨和卫星平台实际大小和预期大小下载耗时本地文件路径下载 URL结果说明日志用于保留运行历史。重复运行时出现新的SKIPPED或SUCCESS记录是正常的日志不会按 URL 去重。2. 下载统计表成功下载且通过文件大小校验的数据会写入download_statistics.csv统计表包含产品、平台、波束、极化、轨道、Path、Frame、时间、空间位置、文件大小、耗时、平均速度、本地路径和 URL 等字段。统计表按照 URL 去重同一文件重复运行不会产生多条统计记录已存在的 URL 不会再次追加下载失败或大小校验不通过的文件不会进入统计表失败文件后续重下成功时只新增这一条成功记录因此.log是运行历史download_statistics.csv是成功数据清单两者用途不同。十、对已经下载的数据生成统计表如果数据已经下载但当时没有生成统计文件可以使用generate_download_statistics该程序只扫描本地文件不连接 ASF也不会重新下载或修改数据文件。1. 自动识别数据集目录如果 CSV 名称和下载时保持一致并且当前目录结构没有改变可以执行./generate_download_statistics download.csv2. 明确指定数据集目录如果 CSV 改过名字、数据移动过位置或者自动识别失败建议明确提供数据集根目录./generate_download_statistics download.csv /data/asf/download_YYYYMMDD_YYYYMMDDWindows 示例.\generate_download_statistics.exe download.csvD:\asf_data\download_YYYYMMDD_YYYYMMDD生成结果位于数据集根目录/download_statistics.csv3. 如何理解扫描结果终端可能显示Validated Files: 25 Missing Files: 40 Size Mismatches: 1 Invalid CSV Rows: 0各字段含义结果含义Validated Files已找到并通过大小校验、写入统计表的文件数量Missing FilesCSV 中存在但本地没有找到的文件数量Size Mismatches本地存在但大小与 CSV 预期值相差超过1%的文件数量Invalid CSV RowsURL 或升降轨字段无效的 CSV 行数Missing Files不一定代表程序出错。例如只选择下载了升轨 SLC而原始 CSV 还包含降轨、RAW 或其他类型时未选择的数据都会显示为缺失并自动跳过。大小不匹配的文件通常是不完整下载不会进入统计表。建议保留或重命名该文件然后通过下载程序重新下载。事后扫描无法还原真实下载耗时和当时速度因此新补录行的这两个字段会留空。如果统计表中已经保存了下载时的真实耗时和速度重新扫描时会保留原值。十一、失败文件如何重新下载如果日志中出现FAILED,...,Download failed or file size validation did not pass.说明下载未完成或大小校验没有通过。建议先把不完整文件改名保留mv/data/asf/download_YYYYMMDD_YYYYMMDD/SLC/ASCENDING/S1A/example.zip\/data/asf/download_YYYYMMDD_YYYYMMDD/SLC/ASCENDING/S1A/example.zip.incomplete然后使用原 CSV、原工作目录和相同筛选参数重新运行./download_slcdata download.csvbool_slcTrueorbit_directionascendingsatellites1a遇到完整的已有文件时可以选择[3] Skip all程序会跳过已有文件并补下载当前筛选范围内缺失的数据。重新下载成功后日志会追加一条SUCCESS统计表会增加该文件的成功记录已经统计过的 URL 不会重复确认新文件完整以后再决定是否删除.incomplete备份。十二、检查统计表是否有重复 URL程序写入download_statistics.csv时会自动按 URL 去重。最简单的整理方法是再次运行独立统计程序它会重新扫描有效文件并生成去重后的统计表./generate_download_statistics download.csv /data/asf/download_YYYYMMDD_YYYYMMDDWindows PowerShell 用户还可以检查重复 URL$rowsImport-CsvD:\asf_data\download_YYYYMMDD_YYYYMMDD\download_statistics.csv$duplicates$rows|Group-ObjectURL|Where-ObjectCount-gt1Statistics rows:$($rows.Count)Duplicate URLs:$($duplicates.Count)正常情况下Duplicate URLs应为0。这里不需要安装 Python。十三、Cookie 与账号安全当前下载程序不会持久化 Earthdata 登录 Cookie。旧版本 ASF 批量下载程序可能在用户主目录留下.bulk_download_cookiejar.txtLinux、Ubuntu 或 Docker 中检查ls-l$HOME/.bulk_download_cookiejar.txt删除rm-f$HOME/.bulk_download_cookiejar.txtWindows PowerShell 中检查Test-Path-LiteralPath$env:USERPROFILE\.bulk_download_cookiejar.txt删除Remove-Item-LiteralPath$env:USERPROFILE\.bulk_download_cookiejar.txt-Force-ErrorAction SilentlyContinue当前程序启动时也会检查这个旧文件并尝试删除即使因为权限不足无法删除也不会读取或复用它。十四、常见问题1. 为什么只设置bool_slcTrue没有下载元数据SLC 影像和 SLC 元数据是两个独立类型。需要同时设置bool_slcTruebool_metadata_slcTrue2. 为什么程序提示所有数据类型都是 False六个类型参数默认全部为False必须至少明确设置一个为True。3. S1A、S1C 和升轨和降轨数据S1A、S1C 表示 Sentinel-1A 和 Sentinel-1C 卫星平台升轨和降轨分别使用ASCENDING、DESCENDING表示。下载时需要通过satellite和orbit_direction两个参数分别选择。4. CSV 中没有对应类型的数据会怎样程序会自动跳过不会创建虚假数据也不会将其他类型当作目标类型下载。5. 为什么扫描统计时有很多 Missing Files原始 CSV 可能包含多个类型和轨道方向而实际只下载了其中一部分。只要Validated Files数量符合预期缺失的未选择数据可以忽略。6. 为什么网卡没有流量但程序速度暂时不为零应用程序、容器虚拟网卡和宿主机物理网卡的统计周期不同内核缓冲也可能造成短暂差异。当前速度按最近统计周期内程序实际收到的文件字节计算完整停顿后会显示0.00 B/s。7. 下载统计会不会重复download_statistics.csv按 URL 去重不会重复.log用于记录每次运行历史允许出现多次SKIPPED或SUCCESS。8. 程序是否支持断点续传当前版本不支持从不完整文件的末尾继续下载。发现不完整文件时应保留或改名然后重新下载完整文件。9. 是否应该使用--insecure正常情况下不应该。只有确认下载来源可信、但环境中确实存在 SSL 证书验证问题时才考虑./download_slcdata download.csvbool_slcTrueorbit_directionascendingsatellites1a--insecure该参数会关闭 SSL 证书校验会降低连接安全性。10. Linux 为什么提示Permission denied先设置执行权限chmod755./download_slcdata ./generate_download_statistics然后重新运行例如./download_slcdata download.csvbool_slcTrueorbit_directionascendingsatelliteall如果设置权限后仍然提示Permission denied检查当前目录所在的文件系统是否使用了noexec挂载选项findmnt-T./download_slcdata-oTARGET,FSTYPE,OPTIONS如果输出中包含noexec即使文件带有x权限也不能从该目录直接执行。可以把程序复制到容器或系统中允许执行的位置再从数据目录调用cp./download_slcdata /tmp/download_slcdatachmod755/tmp/download_slcdata /tmp/download_slcdata download.csvbool_slcTrueorbit_directionascendingsatelliteall程序仍会在当前工作目录中读取 CSV 和创建数据集目录。如果使用相对路径应先进入 CSV 所在目录cd/data/asf /tmp/download_slcdata download.csvbool_slcTrueorbit_directionascendingsatelliteallNFS 共享目录还可能启用root_squash导致容器中的 root 用户无法修改由其他 UID 创建的文件权限。如果chmod返回Operation not permitted应由文件所有者在宿主机上设置权限或者将程序复制到容器内部可执行目录后运行。不要为了处理权限问题而对整个数据目录执行chmod -R 777。十五、推荐使用流程建议按照以下顺序操作在 ASF Vertex 中检索并导出 CSV。根据操作系统选择正确的两个可执行文件并与 CSV 一起放在持久化工作目录中。根据需要选择数据类型、升降轨和卫星平台参数。运行download_slcdata。下载期间关注FAILED和速度停顿提示。下载完成后检查.log和download_statistics.csv。对大小不匹配的文件进行重新下载。对旧数据或外部下载的数据运行generate_download_statistics。将原始 CSV、数据集 README、日志和统计表一起归档。十六、完整下载示例下面以“下载 CSV 中所有 Sentinel-1A 和 Sentinel-1C 的升轨 SLC 数据”为例完整演示一次运行过程。程序会按照 CSV 中的顺序逐个处理文件已有文件根据用户选择跳过或覆盖本地缺失的文件继续下载。为保护账号和数据隐私以下截图使用重新制作的脱敏示例。用户名、目录、日期、产品名、URL 和容量均为演示内容但操作流程与实际程序一致。第1步准备 ASF CSV在 ASF Vertex 中完成检索并导出 CSV。不要使用 Excel 删除列、修改表头或重新排列 URL将原始 CSV 与程序放在同一工作目录即可。假设 Linux 工作目录如下/data/asf/ ├── download_slcdata ├── generate_download_statistics └── download.csv首次使用时增加执行权限cd/data/asfchmod755download_slcdata generate_download_statistics第2步运行下载命令执行./download_slcdata download.csvbool_slcTrueorbit_directionascendingsatelliteall这条命令表示bool_slcTrue只选择 SLC 影像orbit_directionascending只选择升轨satelliteall同时选择 Sentinel-1A 和 Sentinel-1C如果只需要 Sentinel-1C将最后一个参数改为satellites1c第3步完成 Earthdata 认证并确认下载计划程序读取 CSV 后会显示数据集 README 路径、匹配文件数量并要求输入 Earthdata 用户名和密码。密码输入时不会显示字符。认证通过后Download Plan会显示本次匹配的文件数量CSV 中可以计算出的总容量历史平均速度存在历史日志时预计总下载时间用户名、密码和 Cookie 不会保存到磁盘认证仅对当前程序进程有效。第4步处理已经存在的文件如果目标目录中已经存在同名文件程序会显示本地大小、远程大小、修改时间和 ETag然后等待选择示例中输入了3代表Skip all它会在本次运行中跳过后续所有已经存在的同名文件。需要注意Skip all只作用于已经存在的文件本地不存在的匹配文件仍会正常下载15秒内没有输入时默认只跳过当前文件文件大小一致不代表内容哈希一定一致如果确认需要重新下载当前文件可以选择2 Overwrite如果希望覆盖后续全部已有文件可以选择4 Overwrite all。第5步程序依次跳过已有文件选择Skip all后程序不再逐个询问而是自动对后续已有文件应用相同选择终端中的Applying previous choice to all existing files: skip表示批量跳过策略已经生效。每个跳过事件都会立即写入数据集日志状态为SKIPPED。第6步下载本地缺失的数据当程序遇到本地不存在的匹配文件时会开始实际下载并持续显示当前文件进度、实时速度、当前文件 ETA 和全部任务 ETA示例进度File 4/8 Current File: 1.26 GB / 4.10 GB (30.73%) Current Speed: 12.56 MB/s File ETA: 3m 52s Total ETA: 18m 40s每个文件成功下载并通过大小校验后会立即写入日志和download_statistics.csv不需要等待全部任务结束。第7步查看下载摘要全部文件处理完成后程序显示成功、失败、跳过数量、平均速度和总耗时示例中1个本地缺失文件下载成功3个已有文件被跳过没有显示在成功列表中的跳过文件不会重复写入统计表.log仍会保留本次运行产生的SKIPPED历史记录第8步检查生成结果查看数据集目录find/data/asf/download_YYYYMMDD_YYYYMMDD-maxdepth4-typef|sort典型结果包括download_YYYYMMDD_YYYYMMDD/ ├── README.md ├── download.log ├── download_statistics.csv └── SLC/ └── ASCENDING/ ├── S1A/ └── S1C/如果数据是以前下载的或者统计表需要重新生成可以执行./generate_download_statistics download.csv /data/asf/download_YYYYMMDD_YYYYMMDD程序只会把存在且通过大小校验的文件写入统计表。Missing Files表示 CSV 中存在但本地没有找到的数据Size Mismatches表示本地文件大小与 CSV 预期值不一致这两类文件都会被自动排除。结语这套工具适合需要批量下载和整理 ASF Sentinel-1 数据的场景。下载程序负责筛选、认证、分类、日志和实时统计独立统计程序负责对已经存在的数据进行校验和汇总。通过保留原始 ASF CSV、下载日志和去重统计表可以更容易地检查数据完整性并管理不同类型、轨道方向、卫星平台和时间范围的数据集。使用公开数据时请同时遵守 NASA Earthdata、ASF 以及对应数据产品的访问和引用要求。