首页 > 解决方案 > rsync:上传后不要删除源中的几个文件

问题描述

我想编写一个 shell 脚本来使用rsyncsource在名为和的文件夹之间传输文件destination

文件夹的内容

A
B
C
test1.log
test2.json

我想将所有文件从传输到目标,并想删除除test1.log和之外的所有源文件test2.json

即在将所有文件上传到目的地后,文件夹的内容应该是:

test1.log
test2.json

目标文件夹的内容应该是:

    A
    B
    C
test1.log
test2.json

我尝试过

rsync -aP --timeout=120 --remove-source-files -e "ssh -o StrictHostKeyChecking=no -i /id" source user@1.1.1.1:/destination_path/ --exclude=test1.log --exclude=test2.json

但在这种情况下,test1.log并被test2.json排除在上传之外。

但我希望所有文件都上传到目的地,其中大部分在上传后从源中删除,但希望在源中保留少量文件。

有什么办法rsync吗?

标签: linuxshellnetworkingserverrsync

解决方案


正如所user1934428指出的,如果我使用--remove-source-files,则无法保留传输后未删除的某些文件。所以我最终使用了下面的解决方案,因为rsync必须调用两次,所以效率不高。

rsync -aP --timeout=120 --remove-source-files -e "ssh -o StrictHostKeyChecking=no -i /id" source user@1.1.1.1:/destination_path/ --exclude=test1.log --exclude=test2.json

rsync -aP --timeout=120 -e "ssh -o StrictHostKeyChecking=no -i /id" source user@1.1.1.1:/destination_path/ 

推荐阅读