最近,我需要删除大量文件(超过100万个),并且我读到这样做:
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
是执行此操作最优化的方法之一,我可以保证它的速度比快rm -rf
。
我不是这方面的专家,但是据我了解,rsync性能的原因与它列出文件的方式有关(我想是LIFO而不是FIFO)。现在,问题是,我还需要以有效的方式移动大量文件。经过一番搜索,我发现了这一点:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination
虽然这会删除所有移动的文件中~/source
,该目录留在那里。由于我具有类似“循环”的目录结构files/directories
,因此其数量非常接近1,因此我被迫再次运行第一个命令以完全摆脱该目录:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
一条直线mv
几乎可以立即完成,但是我的~/destination
目录中有应保留的文件,因此mv
不是一种选择。我找到了--prune-empty-dirs
and --force
rsync选项,但似乎都不如预期:
--force force deletion of directories even if not empty
--prune-empty-dirs prune empty directory chains from the file-list
--remove-source-files sender removes synchronized files (non-dirs)
有没有办法一口气模仿rsync 的举动?