我正在尝试编写一个简单的 cronjob,它查找特定目录,执行查找命令来确定文件是否在过去两分钟内被修改过,如果没有,则将该文件传输到另一个目录。
我可以毫无问题地找到需要移动的文件并 rsync 这些文件,但是当我合并两个命令时,所有文件都会被移动,即使它们在前 2 分钟内被更改过。
到目前为止,我已经尝试过:
find /tmp/dir/* -cmin +2 | rsync -ogr --chown=user:group --remove-source-files --exclude=".*" /tmp/dir/* /tmp/dir2
也:
find /tmp/dir/* -cmin +2 -exec rsync -ogr --chown=user:group --remove-source-files --exclude=".*" {} /tmp/dir2 \;
我不确定发生了什么,以及为什么返回正确文件的 find 命令不能通过管道传输或“执行”到 rsync 命令中。
提前欢呼,
我知道我很坏
答案1
当你想要使用管道时,你必须告诉 rsync 从 stdin 读取源文件:-包括-来自=-
最好不要在 find 和 rsync 中使用星号字符。
不需要 *--exclude="."。
find /tmp/dir/ -cmin +2 |
rsync -ogr --chown=user:group --remove-source-files --include-from=- /tmp/dir/ /tmp/dir2/