use*_*352 5 files rsync find directory timestamp
所以我试图使用该find
命令来查找我系统中的所有文件mtime -x
。它会这样做,但它不会“找到”文件的目录。
find . -mtime -2 -exec rsync -av {} /destination/ \;
我想如果可以的话,我是否可以将所有目录都带入它们中,所以我尝试过:
rsync -a -f"+ */" -f"- *" source/ destination/
这对于引入目录树很有用,但是当我尝试将文件拉入其中时,它们不会进入单独的目录,它们只是溢出到我将它们复制到的主目录中。
有什么想法可以让我获得find
查找目录的命令或解决此问题的另一种方法吗?
这个命令行有两个问题:
find . -mtime -2 -exec rsync -av {} /destination/ \;`
首先,当给(单个)文件名rsync
而不是简单的目录时,必须明确告诉它使用整个路径,而不仅仅是目标的文件名。为此,请使用选项-R
。从手册页到 rsync(1):
-R, --相对 使用相对路径。这意味着在 命令行被发送到服务器,而不仅仅是最后一部分 的文件名。这在您要发送时特别有用 同时几个不同的目录。例如,如果你 使用了这个命令: rsync -av /foo/bar/baz.c 远程:/tmp/ ...这将在远程机器上的 /tmp/ 中创建一个名为 baz.c 的文件。 如果你使用 rsync -avR /foo/bar/baz.c 远程:/tmp/ 然后将在远程创建一个名为 /tmp/foo/bar/baz.c 的文件 机器,保留其完整路径。这些额外的路径元素是 称为“隐含目录”(即“foo”和“foo/bar” 上面例子中的目录)。 [...]
联机帮助页然后继续介绍如何操作路径,以便只有部分路径出现在接收方,但这超出了此处的范围。
其次,find
如上调用不仅会报告文件,还会报告目录。当一个目录名称被指定rsync
为源时,它会将整个目录同步到目标。这可以使用附加测试-type f
(“类型必须是文件”)来防止find
。但是请注意,这不仅会排除目录,还会排除套接字、命名管道、块和字符设备以及符号链接。对于符号链接,您可以改用-xtype
参数,该参数将检查符号链接目标的类型。
因此,修改后的命令行如下所示:
find . -type f -mtime -2 -exec rsync -av -R {} /destination/ \;
这将find
所有文件(-type f
)在当前路径(.
)已修改的最后两天内(-mtime -2
),并为他们每个人:执行(-exec
)rsync
,复制与给定名称的文件({}
)到/destination/
,保留大多数属性(-a
)给出详细输出 ( -v
) 并在目标 ( -R
)处重现整个路径。