忽略使用的文件 (记录) 使用 rsync

我有一个SFTP服务器,客户不断下载大文件。 我想定期复制一切

满的

(完全读取) 文件到另一台计算机进行处理。 我不想复制活动的文件。 有没有办法实现这一目标? 我目前使用 rsync, 但准备好转向其他任何东西。
已邀请:

风见雨下

赞同来自:

要检查文件是否已打开 (如果当前写入的文件可能是由任何进程打开的), 标准方法是使用

lsof

:

if lsof /your/file > /dev/null; then echo "file currently open"; fi

您可以使用此片段仅对未开封文件过滤搜索结果并使用它们进行喂食。 rsync:

find . -type f -exec sh -c 'if ! lsof `readlink -f {}` > /dev/null; then echo `basename {}`; fi' \; | tr '\n' '\0' | rsync -avz --from0 --files-from=- ./ user@host:destination/

有些笔记:


readlink -f

我们需要指示文件的完整路径, lsof 只需要完整的方法


tr '\n' '\0'

模仿发现

-print0

快网

赞同来自:

其中一个问题是确定是否写入所有文件。 没有理想的方法。 我认为你能做的最好的事情 - 很容易检查文件中的最后一个更改临时标记,并仅复制几分钟内未更改的文件。


rsync

本身不能这样做,但你可以将它结合在一起
http://man7.org/linux/man-pages/man1/find.1.html
:

cd /path/to/directory/with/files
find ./ -type f -mmin +5 -print0 | rsync --archive --verbose --from0 --files-from=- ./ yourotherserver:targetdir/

要打破此命令,它执行两件事:

它用

find ./ -type f -mmin +5 -print0

定义至少未更改的所有文件 5 分钟。

然后他传输了这个列表

rsync

使用

--from0



--files-from

选项。 这将是

rsync

仅考虑那些文件

find

决定。

要回复问题请先登录注册