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

rsync可以通过以下选项与传统mv非常类似,优于传统文件夹:

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

然而,我似乎无法做到的一件事是删除原来的目录。 --remove-source-files标志就是这样做的,除去源文件,而不是源目录。 我希望有一个--remove-source-directories标志,但是没有。

我该如何处理? 我想我可以在移动之后发出一个rm -fr ,但是我宁愿将这个过程全部保存在一个进程中,而不是引入潜在的错误。

我还没有find一个一步到位的命令,但是由于rsync仍然比rm -rf执行得更好(特别是如果你有很多目录的话),这里有两个执行“移动”的 rsync命令:

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

使用“ rm -rf ”具有固有的竞争条件,你可以删除在rsyncrm调用之间创build的文件。

我更喜欢使用:

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

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

这不会删除目录,如果他们不是空的。

为什么不在你的rsync之后添加rm -rf source_directory呢?

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

每个命令行程序(idealy)都是为了完成一个特定的任务而完成的,你可以把几个命令粘在一起来完成更复杂的任务。