我的 rsync 行为很奇怪。我需要将最近 2 天的所有文件从一个文件夹复制到另一个文件夹。
因此,我将 rsync 与 files-from 参数混合在一起,并在脚本中找到实用程序来完成我需要做的事情。
#!/bin/bash
cd /mnt/smb/online/
find . -mtime -2 -print > /tmp/rsynclist
rsync -av --ignore-existing --size-only --files-from=/tmp/rsynclist /mnt/smb/online /mnt/backup/
文件 /tmp/rsynclist 没问题,并且只包含我需要的文件(所有文件不超过 2 天)。但 rsync 似乎忽略了“files-from”参数,并继续从较旧的源复制所有文件。
我哪里错了?
答案1
问题不在于rsync
命令,而在于你的find
。在测试你的脚本时,我注意到我的文件中也有一些目录rsynclist
已被更改,导致 rsync 复制这些目录下的所有文件。
为了防止这种情况,请添加-type f
到您的find
命令中。
#!/bin/bash
cd /mnt/smb/online/
find . -type f -mtime -2 -print > /tmp/rsynclist
rsync -av --ignore-existing --size-only --files-from=/tmp/rsynclist /mnt/smb/online /mnt/backup/
随后,列表中只应包含文件路径,从而给出预期的结果。
答案2
该命令的语法rsync
是:
rsync [option] source[x] destination
您已提供 2 个来源:
- /tmp/rsync列表 ; 正确的那一个
- /mnt/smb/在线;这是错误的,你必须删除它
尝试:
rsync -av --ignore-existing --size-only --files-from=/tmp/rsynclist /mnt/backup/