yll*_*ate 13 shell bash rsync zsh
rsync
可以mv
使用以下选项非常相似地将文件夹哄入移动文件夹中,并且优于传统文件夹:
rsync -axvvES --remove-source-files source_directory /destination/
Run Code Online (Sandbox Code Playgroud)
但是,我似乎还无法完成的一件事是删除原始目录。该--remove-source-files
标志就是这样做的,删除源文件,但不删除源目录。我也希望有--remove-source-directories
一面旗帜,但没有。
我该如何处理? 我想我可以rm -fr
在移动后发出一个,但是我更愿意将整个过程保持在一个过程中,而不是引入潜在的错误。
小智 11
我最终遇到了类似的情况。我想避免rm -rf
,知道 rsync 无法复制某些文件,而且我不想丢失它们。
为了简单地删除空目录,我发现这是最方便的(来自sourcedir
):
find . -type d -empty -delete
Run Code Online (Sandbox Code Playgroud)
使用“ rm -rf ”具有固有的竞争条件,您可以即删除刚刚在rsync和rm调用之间创建的文件。
我更喜欢使用:
rsync --remove-source-files -a server:incoming/ incoming/ &&
ssh server find incoming -depth -type d -delete
Run Code Online (Sandbox Code Playgroud)
如果目录不为空,这将不会删除目录。
我还没有找到一个命令可以一次性执行此操作,但由于 rsync 的性能仍然比rm -rf
(特别是如果您有大量目录)更好,这里有两个执行“移动”的 rsync 命令:
rsync -av --ignore-existing --remove-source-files source/ destination/ && \
rsync -av --delete `mktemp -d`/ source/ && rmdir source/
Run Code Online (Sandbox Code Playgroud)