rsync--cannot delete non-empty directory

​ 解决 rsync 无法删除文件夹问题。

1.rsync 无法删除文件夹

有一个同步服务一直报cannot delete non-empty directory错误,具体表现为source_dir删除了的文件夹,在target_dir无法删除。

  • target_dir:
    1
    2
    3
    4
    5
    ideavim/
    ├── detekt
    ├── doc
    ├── gradle
    ├── resourc
  • source_dir:
    1
    2
    3
    4
    ideavim/
    ├── detekt
    ├── doc
    ├── gradle
    rsync 同步:
    1
    rsync -azv --delete -exclude-from=/tmp/exlcude.txt source_dir target_dir
    然后就报这个错误了:

    cannot delete non-empty directoryd: ideavim/resources

竟然删不掉,当即看了一下exclude.txt,过滤关键字也不会过滤到删不掉的文件夹。

2.解决方法

谷歌搜了一圈,看到rsync-cannot-delete-non-empty-directory-errors-even-with-force-option

Did you try to add –delete-excluded?

果断加这个参数,再带上–dry-run参数执行,啊这,确实删掉了,还把我exclude-from的列表也给干掉了,没用。

不对,突然灵光乍现,看一下要删掉的resources到底有啥玩意:

1
2
ideavim/resources/
├── messages.properties

好家伙,这个messages.properties,正好是exclude.txt的过滤关键字,果断干掉所有的properties文件,再次执行同步命令,ok!

出现这个问题的原因是因为一开始过滤关键字并没有properties,所以把这个文件同步到了target_dir,后来加上了过滤关键字,就请神容易,送神难了。