RSYNC 不会删除源目录

RSYNC 不会删除源目录

我使用 rsync 从服务器上获取文件,然后在本地获取文件后从服务器上删除它们。我运行的完整命令如下。

这确实成功删除了文件在源服务器上,但空目录仍然存在。我没有收到任何消息或错误。所有输出都正常。也许这是预期的功能。

我怎样才能告诉 rsync 清理所有内容,包括目录?

rsync --progress -vrzh --remove-source-files

两端的版本都是3.0.9。

答案1

您观察到的行为--remove-source-files正是man rsync

--删除源文件

   This tells rsync to remove from the sending side the files (meaning non-directories) that are a part of the transfer and have been successfully duplicated on the receiving side.

没有特定的命令来删除目录,因为这两个讨论StackExchange服务器故障清楚地显示。建议的解决方案是发出两个单独的命令:

 rsync -av --ignore-existing --remove-source-files source/ destination/ && \
 rsync -av --delete `mktemp -d`/ source/ 

这两篇文章中建议的最后一条命令是,

 rmdir source/

删除(现已清空的)源目录所需的命令在这些帖子中具有这种形式,因为 OP 和答案都使用 rsync 在同一台机器内移动大量文件。对于你的情况,你必须手动执行此操作。

答案2

手册页提到它只删除非目录:

--remove-source-files   sender removes synchronized files (non-dirs)

这是预期的行为。

如果您想删除源中的空目录,如果仍然有文件剩余,请执行以下操作:

find . -type d -empty -delete

这将递归,因为它使用的是find,并且仅适用于空目录(通过选项-empty)。-delete删除这些目录。(您不能通过这种方式删除非空目录。)

如果它只是一个空的源目录,那么rmdir <directory>当然就足够了。

答案3

使用 ”射频“具有固有的竞争条件,你可以删除在同步R M调用。

我更喜欢使用:

rsync --remove-source-files -a 服务器:incoming/incoming/ &&

ssh 服务器 find 传入 -type d -delete

如果目录不是空的,则不会删除目录。

答案4

-m, --prune-empty-dirs从文件列表中修剪空目录链

--force强制删除目录,即使目录不为空

相关内容