使用 rsync 移动文件夹时如何删除空的源目录?

使用 rsync 移动文件夹时如何删除空的源目录?

rsyncmv可以通过以下选项以与传统方式非常相似且更优越的方式诱导移动文件夹:

rsync -axvvES --remove-source-files source_directory /destination/

但是有一件事我似乎还不能让它做,那就是删除原始目录。该--remove-source-files标志就是这么做的,删除源文件,但不会删除源目录。我希望--remove-source-directories也有一个标志,但没有。

我该如何处理这个问题? 我想我可以rm -fr在移动后发出一个,但是我更愿意将整个过程保持在一个过程中,而不是引入出现错误的可能性。

答案1

我还没有找到一个可以一次性完成这些操作的命令,但由于 rsync 的性能仍然比它更好rm -rf(特别是如果你有大量的目录),这里有两个 rsync 命令可以“移动”

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

答案2

我最终也遇到了类似的情况。我想避免这种情况rm -rf,因为我知道 rsync 无法复制某些文件,而且我不想丢失它们。

要简单地删除空目录,我发现这个最方便(来自sourcedir):

find . -type d -empty -delete

答案3

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

我更喜欢使用:

rsync --remove-source-files -a server:incoming/ incoming/ && 
ssh server find incoming -depth -type d -delete

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

答案4

为什么不直接rm -rf source_directory在 rsync 后添加?

rsync -axvvES --remove-source-files source_directory /destination/ && rm -rf source_directory

每个命令行程序(理想情况下)都是为执行指定的任务而设计的,您可以将多个命令行程序粘合在一起来完成更复杂的任务。

相关内容