使用 rsync 删除在源中找到的目标上的文件

使用 rsync 删除在源中找到的目标上的文件

rsync我想知道是否有任何方法可以使用源中找到的文件删除目标中的所有文件。我在源中有 30 多个目录,在目标中有 100 多个文件

我只想递归删除目的地中的 30+ 个,想知道是否rsync或任何其他可以帮助我做到这一点......

来源

a/
b/
c/

目的地

a/
abc/
xyz/
b/
c/
...

答案1

我认为这rsync不能做到这一点,但您可以创建文件列表,修改该列表并将其作为脚本复制到目标。

假设您的文件名不包含换行符或单引号 ( '),请在源计算机上运行以下命令:

cd basedir
find . -type f | sed 's/^/rm -f '\''/' | sed 's/$/'\''/' > /var/tmp/to_remove

然后将文件复制to_remove到目标计算机的cd基本目录并获取它。任何不存在但在列表中的文件都不会产生任何影响,并且仅在目标中可用的其他文件也不会被触及。

如果您还想删除目录,则可以使用附加目录,但这会删除源中存在且目标中为空的目录,无论是否从目录中删除了文件。

find . -depth -type d | sed 's/^/rmdir -f '\''/' | sed 's/$/'\''/' > /var/tmp/to_remove

答案2

cd a
find . -type f -print0 | ssh ${server_name} "cd $path_to_b;cat | xargs -0 rm"
ssh ${server_name} "find ${path_to_b} -empty -type d -delete"

您将收到 a 中的文件在 b 中不存在的错误消息。第二个命令删除目标上的空文件夹。

相关内容