You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从服务器scp父目录下含子目录的所有.txt文件至本地并保留结构?

如何用SCP传输指定类型文件并保留目录结构

嘿,这个需求我太熟了——要从服务器的/master目录下把所有.txt文件(包括嵌套子目录里的)传到本地,还得原封不动保留目录结构对吧?给你两个实用方案,按需选就行:

方案1:SCP + Tar 管道传输(无需临时文件)

如果你的服务器上没装rsync,或者更倾向于只用scp相关的工具,这个方法最稳妥。核心思路是在服务器上把所有目标.txt文件打包(直接输出到管道),然后本地接收并解压,完美保留结构:

执行命令(本地终端运行)

# 先确保本地目标目录存在
mkdir -p /local-dir

# 直接通过SSH+Tar管道传输,无需在服务器存临时包
ssh your_username@your_server_ip 'cd /master && find . -name "*.txt" -print0 | tar -czf - --null -T -' | tar -xzf - -C /local-dir

命令解释:

  • find . -name "*.txt" -print0:在/master下递归查找所有.txt文件,用-print0避免文件名含空格/特殊字符时出错
  • tar -czf - --null -T -:把find找到的文件打包成gzip压缩包,-表示输出到标准输出,--null配合-print0处理特殊文件名,-T -表示从标准输入读取要打包的文件列表
  • 管道|把服务器的打包输出直接传到本地,tar -xzf - -C /local-dir在本地解压到指定目录,自动重建目录结构

方案2:用Rsync(更简洁,支持断点续传)

如果服务器和本地都装了rsync(大部分Linux/Unix系统默认都有),这个方法更简单直观,而且自带断点续传,大文件或不稳定网络下更靠谱:

执行命令(本地终端运行)

mkdir -p /local-dir

rsync -avz --include="*/" --include="*.txt" --exclude="*" your_username@your_server_ip:/master/ /local-dir/

命令解释:

  • -avz:a(归档模式,保留权限、时间戳等)+v(显示详细日志)+z(压缩传输,节省带宽)
  • --include="*/":先包含所有子目录,这样rsync才能递归进去查找.txt文件
  • --include="*.txt":包含所有.txt文件
  • --exclude="*":排除其他所有文件/目录,确保只传需要的.txt和必要的目录结构

注意事项

  • 替换your_username@your_server_ip为你实际的服务器用户名和IP/域名
  • 如果目标路径包含空格,记得用双引号把路径括起来,比如"/local-dir/my folder"
  • 如果你需要sudo权限才能访问服务器上的/master目录,可以在ssh命令里加sudo,比如:ssh your_username@your_server_ip 'sudo cd /master && ...'(可能需要输入sudo密码)

内容的提问来源于stack exchange,提问作者Yuchen Peng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:04:13