rsync同步报错cannot delete non-empty directory的问题

在使用rsync进行文件同步时,遇到了因目录不为空导致的删除错误。通过添加`--delete-excluded`参数,成功解决了这个问题,能够删除排除列表中的目录并完成同步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# rsync同步报错,目录不为空不能删除的问题
# rsync -zavP --password-file="/data/www/.rsync/rsyncd.aliszdownload" --exclude=cbs_down --delete /data/www/vhosts/download.chinasoft.com/httpdocs/ apache@1.1.1.1::apache/data/www/vhosts/download.chinasoft.com/httpdocs/
cannot delete non-empty directory: data/www/vhosts/download.chinasoft.com/httpdocs
cannot delete non-empty directory: data/www/vhosts/download.chinasoft.com/httpdocs
cannot delete non-empty directory: data/www/vhosts/download.chinasoft.com
cannot delete non-empty directory: data/www/vhosts/download.chinasoft.com
cannot delete non-empty directory: data/www/vhosts
cannot delete non-empty directory: data/www/vhosts
cannot delete non-empty directory: data/www
--delete-excluded
# 可以加上参数 --delete-excluded 就可以删除了
[root@download-web01:~]# rsync -zavP --password-file="/data/www/.rsync/rsyncd.aliszdownload" --exclude=cbs_down --delete --delete-excluded /data/www/vhosts/download.chinasoft.com/httpdocs/ apache@1.1.1.1::apache/data/www/vhosts/download.chinasoft.com/httpdocs/
sending incremental file list
deleting cbs_down
deleting data/www/vhosts/download.chinasoft.com/httpdocs/cbs_down
deleting data/www/vhosts/download.chinasoft.com/httpdocs/
deleting data/www/vhosts/download.chinasoft.com/
deleting data/www/vhosts/
deleting data/www/
developer/
developer/12.5.zip
      2,660,463 100%    7.02MB/s    0:00:00 (xfr#1, ir-chk=1020/5507)
sent 2,883,387 bytes  received 634 bytes  824,006.00 bytes/sec
total size is 264,107,857,202  speedup is 91,576.26

<think>好的,我现在需要帮助用户正确使用rsync命令的-a和--delete选项,将空目录empty/同步到/var/spool/clientmqueue,以达到清理队列的目的。首先,我得回顾一下rsync的相关参数和用户提供的引用资料。 用户提到引用[4]指出rsync是一个远程数据同步工具,使用算法只同步文件的不同部分,效率很高。而清理队列可能需要删除目标目录中的多余文件,所以--delete参数是关键。根据引用[2],--delete-before表示在传输前删除目标中的多余文件,而--del是--delete-during的别名,即在传输期间删除。默认情况下,rsync使用--delete-before,所以用户可能不需要特别指定,但为了明确,最好在命令中加上--delete。 用户希望同步空目录,所以源目录empty/应该是空的。需要确认用户是否已经创建了该空目录,或者是否需要临时创建一个。根据引用[1],用户之前可能用过/tmp/empty.txt来同步,但这里应该用目录。因此,正确命令可能是rsync -a --delete empty/ /var/spool/clientmqueue/。这里要注意源目录后的斜杠,确保同步的是目录内容而非目录本身。 另外,-a参数表示归档模式,保持权限、时间戳等,但可能需要考虑是否需要其他选项,比如-H处理硬链接,或者--stats显示统计信息,但这些可能不是必须的。用户的主要目的是删除目标目录中的文件,所以重点在--delete和正确的源目录路径。 需要提醒用户谨慎操作,因为--delete会不可逆地删除目标目录中不在源目录中的文件。建议先使用--dry-run选项模拟运行,确认无误后再执行实际同步。 总结步骤:创建空目录empty/,运行rsync命令,加上-a和--delete,并确保路径正确。同时注意权限问题,可能需要sudo。最后验证同步结果,确保目标目录已被清空。</think>要使用rsync命令同步空目录以实现队列清理,需结合`-a`归档模式与`--delete`删除参数,具体步骤如下: ### 操作步骤 1. **创建空目录** ```bash mkdir empty ``` 确保该目录为空,作为源目录使用 2. **执行同步命令** ```bash rsync -a --delete empty/ /var/spool/clientmqueue/ ``` - `-a`:归档模式,保留文件属性并递归同步[^4] - `--delete`:自动删除目标目录中源目录不存在的文件(默认使用`--delete-before`策略)[^2] - 路径末尾的`/`表示同步目录内容而非目录本身 3. **验证权限** 若目标目录需要root权限,需添加sudo: ```bash sudo rsync -a --delete empty/ /var/spool/clientmqueue/ ``` ### 安全提示 - **预演测试**:先执行`--dry-run`参数模拟操作 ```bash rsync -a --delete --dry-run empty/ /var/spool/clientmqueue/ ``` - **数据备份**:操作前建议备份目标目录,避免误删重要文件 ### 参数解析 | 参数 | 作用 | |------------|--------------------------------------------------------------------| | `-a` | 等价于`-rlptgoD`,保持权限、时间戳等属性 | | `--delete` | 删除目标端多余文件,与`--delete-before`等效(传输前删除)[^2] | ### 应用场景 该命令常用于日志清理、缓存刷新等需要保持目录结构但清空内容的场景。例如邮件队列目录`/var/spool/clientmqueue`的清理[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值