如何使用scp命令从Linux服务器下载特定日期的Zip文件?
实现Linux服务器特定日期Zip文件的本地下载
完全可以实现,以下是几种常用的方法:
方法一:find 筛选 + scp 下载
1. 先在服务器上确认目标文件
通过修改时间筛选特定日期的Zip文件(以2024-05-20为例):
find /path/to/zip/files -type f -name "*.zip" -newermt "2024-05-20" ! -newermt "2024-05-21"
参数说明:
/path/to/zip/files:替换为你的Zip文件存储路径-type f:只筛选文件(排除目录)-name "*.zip":仅匹配Zip后缀的文件-newermt "2024-05-20":筛选修改时间晚于2024-05-20 00:00的文件! -newermt "2024-05-21":排除修改时间晚于2024-05-21 00:00的文件,最终得到2024-05-20当天的文件
2. 批量下载到本地
方式A:直接通过管道传递文件列表到scp
在本地终端执行:
ssh user@server_ip "find /path/to/zip/files -type f -name '*.zip' -newermt '2024-05-20' ! -newermt '2024-05-21'" | xargs -I {} scp user@server_ip:{} /local/save/path
替换user为服务器用户名,server_ip为服务器IP,/local/save/path为本地存储路径。
方式B:先打包再下载(大文件批量下载更高效)
在本地终端执行:
ssh user@server_ip "cd /path/to/zip/files && find . -type f -name '*.zip' -newermt '2024-05-20' ! -newermt '2024-05-21' | xargs tar czf -" | tar xzf - -C /local/save/path
该命令会在服务器上把目标文件打包成压缩包,通过SSH传输到本地后自动解压。
方法二:rsync 按时间范围同步
rsync支持按时间戳筛选文件,适合批量同步场景:
rsync -av --include="*.zip" --exclude="*" --min-age=$(date -d '2024-05-20' +%s) --max-age=$(date -d '2024-05-21' +%s) user@server_ip:/path/to/zip/files/ /local/save/path/
参数说明:
-av:归档模式(保留文件属性)+ 详细输出--include="*.zip":仅包含Zip文件--exclude="*":排除其他所有文件--min-age/--max-age:用Unix时间戳指定文件修改时间的范围
简化技巧:文件名含日期前缀
如果你的Zip文件名本身包含日期(比如20240520_data.zip),可以直接用通配符匹配,无需复杂的时间筛选:
scp user@server_ip:/path/to/zip/files/*20240520*.zip /local/save/path
注意事项
- 确保服务器与本地机器的时间同步,避免时间筛选出现偏差
- 如果服务器禁用密码登录,提前配置SSH密钥对,避免重复输入密码
内容的提问来源于stack exchange,提问作者nithinc
相关产品推荐
相关产品推荐

