синхронизировать конкретный файл рекурсивно, но только в подкаталогах, присутствующих в пункте назначения

У меня есть два каталога dirOrig и dirDest на разных удаленных серверах. Оба они имеют множество подкаталогов на разных глубинах. Теперь мне нужно скопировать определенный файл или расширение – скажем, file1.txt рекурсивно из dirOrig в dirDest . Но мне нужно скопировать файл, только если этот подкаталог уже присутствует в dirDest .

Например, я могу систематически копировать только определенный файл из источника в пункт назначения, используя rsync, используя

 rsync -zarv --prune-empty-dirs --include "*/" --include="file1.txt" --exclude="*" "dirOrig" "dirDest" 

Но как ограничить эту копию только в подкаталогах, присутствующих в пункте назначения ( dirDest )

  • Не удается rsync: сбой записи - на устройстве нет места (28)
  • rsync: продолжить или в произвольном порядке
  • backup / on файловая система ntfs зашифрована
  • Абсолютный путь в статистике сухого rsync
  • Rsync не пропускает существующие файлы
  • Скопируйте последние использованные файлы общего размера
  • сохранение расширенных атрибутов cp / rsync
  • Как было изменено резервное копирование непустого каталога и сохранение метаданных, таких как права / файл прав пользователя / файл времени?
  • One Solution collect form web for “синхронизировать конкретный файл рекурсивно, но только в подкаталогах, присутствующих в пункте назначения”

    Я не знаю ни одной команды, но взлом, который я придумал, выглядит следующим образом.

    1. Используйте rsync для копирования dirOrig с dirOrig на server2

      rsync -zarv --prune-empty-dirs --include "*/" \ --include="file1.txt" --exclude="*" "server1:dirOrig" \ "server2:dirOrig"

    2. Удалите подкаталоги в скопированном dirOrig , которых нет в dirDest используя comm

      comm -23 <( cd server2:dirOrig && find -mindepth 1 -type d | sort ) \ <( cd server2:dirDest && find -mindepth 1 -type d | sort ) \ | ( cd server2:dirOrig && xargs rm -rf )

    3. Наконец rsync dirDest с dirOrig на основе контрольной суммы и удалите все файлы в dirOrig, отсутствующие в dirDest, за исключением file1.txt

      rsync -acv --exclude=file1.txt --delete \ server2:dirDest server2:dirOrig

    Linux и Unix - лучшая ОС в мире.