![如何仅同步与模式匹配的较新(非新)文件](https://linux22.com/image/215851/%E5%A6%82%E4%BD%95%E4%BB%85%E5%90%8C%E6%AD%A5%E4%B8%8E%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%E7%9A%84%E8%BE%83%E6%96%B0%EF%BC%88%E9%9D%9E%E6%96%B0%EF%BC%89%E6%96%87%E4%BB%B6.png)
我试图让 rsync 仅复制比目标本地目录上的匹配项更新的 *.ko 文件。我正在使用 --update 但似乎 rsync 仍然想要复制与目标相同的文件。我正在使用这个命令:
rsync -avmR --dry-run --update --include='*.ko' --include='*/' --exclude='*' drivers/gpu/ /lib/modules/6.1.0-rc2+/kernel/drivers/gpu/
我在构建 Linux 内核后运行此命令。此构建在几个子目录中创建了一堆 .ko 文件。例如,这是一个子集:
$ find drivers/gpu/ -name "*.ko"
drivers/gpu/drm/amd/amdgpu/amdgpu.ko
drivers/gpu/drm/display/drm_display_helper.ko
drivers/gpu/drm/drm_vram_helper.ko
drivers/gpu/drm/hyperv/hyperv_drm.ko
drivers/gpu/drm/i915/i915.ko
我想要的是复制所有较新的.ko 文件复制到 /lib/modules/6.1.0-rc2+/kernel/drivers/ 下的目标路径。也就是说,只有在以下情况下才应复制 .ko 文件:存在在目标上和本地版本是较新的按创建日期比匹配的目标文件。
例如,如果 /lib/modules/6.1.0-rc2+/kernel/drivers/gpu/drm/i915/i915.ko 存在并且 drivers/gpu/drm/i915/i915.ko 较新 /lib/modules/6.1 .0-rc2+/kernel/drivers/gpu/drm/i915/i915.ko,然后将 drivers/gpu/drm/i915/i915.ko 复制到 /lib/modules/6.1.0-rc2+/kernel/drivers/gpu/ drm/i915/i915.ko。
问题是,当我运行上面的 rsync 命令时,它显示的 .ko 文件是不是比他们的目标更新。例如,在这里您可以看到两个目录中的 virtio-gpu.ko 已经是同一个文件:
$ ls -l drivers/gpu/drm/virtio/virtio-gpu.ko /lib/modules/6.1.0-rc2+/kernel/drivers/gpu/drm/virtio/virtio-gpu.ko
-rw-r--r-- 1 ttabi ttabi 4992944 Jan 17 13:36 drivers/gpu/drm/virtio/virtio-gpu.ko
-rw-r--r--. 1 ttabi ttabi 4992944 Jan 17 13:36 /lib/modules/6.1.0-rc2+/kernel/drivers/gpu/drm/virtio/virtio-gpu.ko
但是,上面的 rsync 命令显示:
$ rsync -avmR --dry-run --update --include='*.ko' --include='*/' --exclude='*' drivers/gpu/ /lib/modules/6.1.0-rc2+/kernel/drivers/gpu/
building file list ... done
drivers/
drivers/gpu/
drivers/gpu/drm/
...
drivers/gpu/drm/virtio/
drivers/gpu/drm/virtio/virtio-gpu.ko
这告诉我,如果我删除 --dry-run,rsync 将不必要地文件 virtio-gpu.ko 的副本。
我该如何解决?
答案1
R
命令选项中的 是相对路径,我认为这意味着相对于调用命令的位置。
首先复制的是drivers
目录。我认为这正在被复制到/lib/modules/6.1.0-rc2+/kernel/drivers/gpu/
.
这意味着drivers/gpu/drm/virtio/virtio-gpu.ko
正在复制的文件正在被复制到/lib/modules/6.1.0-rc2+/kernel/drivers/gpu/drivers/gpu/drm/virtio/virtio-gpu.ko
(注意加倍的drivers/gpu
)。
我会尝试不使用相对路径,如果您不想rsync
复制目标中尚不存在的文件,请使用--existing
跳过创建新文件。