패턴과 일치하는 최신(새 파일 아님) 파일만 동기화하는 방법

패턴과 일치하는 최신(새 파일 아님) 파일만 동기화하는 방법

대상 로컬 디렉터리의 일치 항목보다 최신인 *.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.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

관련 정보