我如何操作find命令来查找“found”文件所在的目录?

所以我试图用find命令在mtime -x查找系统中的所有文件。 它这样做,但它不“find”文件的目录

find . -mtime -2 -exec rsync -av {} /destination/ \;

我想如果我可以把所有的目录,它会喂养他们,如果可以的话,所以我试过:

rsync -a -f"+ */" -f"- *" source/ destination/

这对于引入目录树是一种魅力,但是当我试图将文件拉入它时,它们不会进入单独的目录,它们只是溢出到我复制到的主目录中。

任何想法如何我可以得到find命令find目录也或另一种方式解决这个问题?

这个命令行有两个问题:

find . -mtime -2 -exec rsync -av {} /destination/ \;`

传输path名称

首先,当给rsync (单个)文件名而不是一个简单的目录时,必须明确地告诉它使用整个path,而不仅仅是目的地的文件名。 为此,请使用选项-R 。 从手册页到rsync(1):

-R, - 相对 使用相对path。 这意味着完整的path名称在 命令行被发送到服务器而不仅仅是最后的部分 的文件名。 当你想发送时,这是特别有用的 几个不同的目录在同一时间。 例如,如果你 使用这个命令: rsync -av /foo/bar/baz.c remote:/ tmp / ...这将在远程机器的/ tmp /中创build一个名为baz.c的文件。 如果你使用 rsync -avR /foo/bar/baz.c remote:/ tmp / 那么将在远程创build一个名为/tmp/foo/bar/baz.c的文件 机器,保存完整的path。 这些额外的path元素是 所谓的“隐含目录”(即“foo”和“foo / bar” 在上面的例子中的目录)。 [...]

然后,手册页将继续讨论如何操纵path,以便只有部分path出现在接收端,但这不在范围之内。

仅search文件,不search目录

其次,如上所述find不仅报告文件,而且还有目录。 当一个目录名给rsync作为源时,它将把整个目录同步到目的地。 这可以防止使用额外的testing-type f (“types必须文件”) find 。 但是,请注意,这不仅会排除目录,还会包含套接字,命名pipe道,块和字符设备以及符号链接。 对于符号链接,可以使用-xtype参数,它将检查符号链接目标的types。

所以,修改后的命令行如下所示:

find . -type f -mtime -2 -exec rsync -av -R {} /destination/ \;

这将find当前path( . )中最近两天( -mtime -2 )内已修改的所有文件( -type f ),以及它们中的每一个:execute( -execrsync ,将文件复制到( {} )到/destination/ ,保留大多数属性( -a ),给出详细输出( -v )并在目的地( -R )重现整个path。