在使用 scp 时,如果你不想将软链接指向的实际内容复制过来,只需要加上 -r 参数,但 不跟随符号链接,即直接复制符号链接本身。为此,可以使用以下方法:

方法 1:只复制符号链接本身(本地拷贝有效)

直接在 scp 命令中加上 -r 参数,同时注意源路径中包含软链接。示例如下:

scp -r /path/to/symlink /path/to/destination

如果只是文件名或者符号链接(非解开实际内容),这可以直接生效。

方法2: rsync

rsync 是一个强大的工具,用于高效同步和复制文件和目录。它支持局部更新、增量传输和各种复杂的配置选项,非常适合用于备份和文件同步任务。

常见的 rsync 用法

1. 基本用法

将文件从源目录同步到目标目录:

rsync -av /source/path/ /destination/path/
  • -a:归档模式,保持文件权限、时间戳、符号链接等。
  • -v:显示详细信息。

注意:结尾的 / 很重要:

  • /source/path/:同步目录中的内容,不包括目录本身。
  • /source/path:同步目录及其内容。
2. 同步到远程主机

可以使用 ssh 与远程主机通信:

rsync -av /source/path/ user@remote:/destination/path/

或者从远程主机同步到本地:

rsync -av user@remote:/source/path/ /local/destination/

3. 只复制软链接本身

默认情况下,rsync 会跟随软链接,复制其指向的实际内容。如果你只想复制软链接本身,可以加上 -l 选项:

rsync -av -l /source/path/ /destination/path/

4. 删除目标中多余的文件

如果希望目标目录完全匹配源目录,可以使用 --delete 选项:

rsync -av --delete /source/path/ /destination/path/

这会删除目标目录中源目录中没有的文件。

5. 排除特定文件或目录

使用 --exclude 选项排除特定文件或目录:

rsync -av --exclude 'file_or_dir_to_exclude' /source/path/ /destination/path/

例如,排除 tmp 文件夹:

rsync -av --exclude 'tmp/' /source/path/ /destination/path/

6. 显示进度

加上 --progress 选项可以在传输过程中显示进度:

rsync -av --progress /source/path/ /destination/path/

高级用法

1. 带带宽限制的传输

如果网络较慢,可以限制传输速度(单位为 KB/s):

rsync -av --bwlimit=1000 /source/path/ /destination/path/

2. 仅同步更新的文件

默认情况下,rsync 会检查文件时间戳和大小。如果你只想同步更新的文件,可以这样用:

rsync -av --update /source/path/ /destination/path/

3. 同步部分目录结构

可以使用 --include--exclude 来选择性同步文件:

rsync -av --include '*/' --include '*.txt' --exclude '*' /source/path/ /destination/path/

这个命令只同步 .txt 文件及其父目录。

检查而不实际执行

rsync 提供 --dry-run 选项,用于模拟同步而不真正执行。非常适合在操作前验证:

rsync -av --dry-run /source/path/ /destination/path/

常用组合

将本地文件同步到远程服务器并删除多余的文件:

rsync -azv --delete /local/path/ user@remote:/remote/path/

从远程服务器拉取文件,排除特定目录:

rsync -azv --exclude 'logs/' user@remote:/remote/path/ /local/path/

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐