Linux / Unix rsync:传输后删除源文件
您需要将--remove-source-files选项传递给 rsync 命令。它告诉 rsync 从发送方删除作为传输一部分且已在接收方成功复制的文件(即非目录)。不要将选项传递给 rsync 命令,--delete因为它会从目标目录中删除无关文件。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | 文件管理 |
操作系统兼容性 | AIX • Alma • Alpine • Amazon Linux • Arch • BSD • CentOS • Debian • Fedora • FreeBSD • HP-UX • Linux • macOS • Mint • NetBSD • OpenBSD • openSUSE • Pop!_OS • RHEL • Rocky • Stream • SUSE • Ubuntu • Unix • WSL |
预计阅读时间 | 3 分钟 |
使用 rsync 成功传输后删除源
语法如下:
rsync --dry-run -remove-source-files -options /path/to/src/ /path/to/dest rsync --dry-run --remove-source-files -options /path/to/src/ computerB:/path/to/dest rsync --dry-run --remove-source-files -av /path/to/src/*.avi computerB:/path/to/dest
您始终可以使用--dry-run选项执行不做任何更改的试运行,如下所示:
rsync --dry-run --remove-source-files -azv /path/to/Download/*.avi laptop:~/Download
如果您喜欢输出,请运行不带--dry-run选项的最终命令。例如:
rsync --remove-source-files -azv /path/to/Download/*.avi laptop:~/Download
从目标目录中删除无关文件
以下命令告诉 rsync 从接收端删除无关文件(不在发送端的文件),但仅限于正在同步的目录。您必须要求 rsync 发送整个目录(例如“dir”或“dir/”),而不使用通配符作为目录内容(例如“dir/*”),因为通配符由 shell 扩展,因此 rsync 会收到传输单个文件的请求,而不是文件的父目录。除非您使用 --delete- excluded选项或将规则标记为仅在发送端匹配,否则从传输中排除的文件也不会被删除。因此,按--delete如下方式传递:
rsync --dry-run --delete -azv source dest rsync --dry-run --delete -azv /foo/bar/ destA:/foo/bar ############################################################################################ # Run the final command without '--dry-run' option when you got the correct outputs ############################################################################################# rsync --delete -azv /foo/bar/*.txt destA:/foo/bar
--delete选项可以与 –delete-WHEN 选项之一结合使用而不会发生冲突,也可以与 –delete-excluded 结合使用,如下所示:
–delete-WHEN 选项 | 描述 |
---|---|
--删除之前 | 接收方在传输前删除,而不是在传输过程中 |
--删除期间 | 接收方在传输过程中删除 |
--删除延迟 | 查找删除期间,删除之后 |
--删除后 | 接收方在传输后删除,而不是在传输过程中 |
--删除排除 | 还从目标目录中删除排除的文件 |
--删除缺少的参数 | 从目标中删除缺失的源参数 |
--忽略错误 | 告诉 –delete 即使出现 I/O 错误也继续删除文件。 |
总结
--remove-source-files表示rsync 命令将从发送方删除作为传输一部分且已在接收方成功复制的文件(即非目录)。另一方面,--delete选项告诉 rsync 从接收方删除无关文件(不在发送方的文件),但仅限于正在同步的目录。如果误用,这两个选项都可能很危险。首先,最好尝试使用 --dry -run选项运行以查看将删除哪些文件。有关更多信息,请使用 man command/info 命令或 help 命令在线或离线查看 rsync 命令手册:
$ man rsync
$ rsync --help
# filter outputs using grep command or egrep command #
$ rsync --help | grep -E -w -- '--(delete|remove)'
你注意到了吗????
加入Patreon ➔ PayPal ➔