パターンに一致する最新(新しいファイルではない)ファイルのみを同期する方法

パターンに一致する最新(新しいファイルではない)ファイルのみを同期する方法

ターゲットローカルディレクトリの一致よりも最新の* .koファイルのみをコピーするようにrsyncを取得しようとしています。 --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.ja。

問題は、上記の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

おすすめ記事