使用 rsync -a delete 删除包含大量文件的目录

使用 rsync -a delete 删除包含大量文件的目录

我有一个名为 的目录crmlogs,如何rsync -a --delete删除它?

mkdir emptydir
rsync -a --delete ./emptydir ./crmlogs

答案1

根据linuxnote.net 的 webarchive是删除大型目录最快的方法,大约比 with或 withrsync -aP –delete empty/ ./dir快三倍rm -rfv ./dirfind b/ -type f -delete

因为它可能需要一段时间,所以详细的输出-P很方便,或者你永远盯着空的提示行......

为了避免无休止的滚动,我将 STDOUT 重定向到awk在单行上显示输出(带有行计数器),如下所示:

rsync -aP --delete ./emptyDir/ ./dir/ | awk ' { printf ( "\r #%4d: %-200s", NR, $0 ) } '

用于跳过没有权限行,使用 sudo:

sudo rsync -aP --delete ./emptyDir/ ./dir/ | awk'{printf("\r #%4d: %-200s",NR,$0)}'

解释:awk因为printf单独不能捕获 STDOUT,所以\r要将光标设置在输出行的开头,NR对于行#计数器并%4d右填充行#,%-200s对于 200 个字符的输出字符串右填充覆盖前一行(如果终端窗口至少有这个宽度,则为 200)

答案2

交换机--delete从目标中删除源中不存在的文件。如果要删除crmlogs,则需要从不包含该目录的源进行复制。您的示例显示您rsync在根目录下的两个目录之间使用。在这个例子中更容易看到/tmp

/tmp $ cd tmp
/tmp $ mkdir foo
/tmp $ mkdir bar
/tmp $ mkdir bar/crmlogs

/tmp $ rsync -a --delete foo/ bar/

/tmp $ ls -l bar
total 0
drwxr-xr-x  2 mint mint  40 Jan 10 23:19 ./
drwxrwxrwt 10 root root 220 Jan 10 23:19 ../

请注意,rsync -a --delete foo barorrsync -a --delete ./foo ./bar只是将一个副本放在foo下面bar

从您的后续评论来看,我不确定您是否真的想要删除该crmlogs目录,或者只是清除源中可能不再存在的某些日志文件。如果是这样,--delete一旦这些文件从源文件夹中删除,该开关应该对您有用。

相关内容