rsync список файлов в подкаталогах на удаленный сервер и удаление посторонних

Я не смог найти ответ на этот вопрос. Я пробовал всевозможные комбинации --delete-excluded , --delete-excluded , -r , --delete-excluded и исходный каталог.

Это то, что я пытаюсь выполнить:

  • Исходный каталог:

     Dir1/File1-1 Dir1/File1-2 Dir2/File2-1 Dir2/File2-2 Dir2/File2-3 Dir3/File3-1 Dir3/File3-2 Dir3/File3-3 ... 
  • Целевой каталог:
    (состояние неизвестно)

То, что я хотел бы сделать, – предоставить предопределенное подмножество файлов из исходного каталога с относительным путем и rsync их в удаленный пункт назначения, удалив что-либо из адресата (включая каталоги), которого не было в подмножестве файлов ,

Например, с учетом приведенного выше справочника источника:

  • Мой предварительно определенный список файлов:

     Dir1/File1-2 Dir3/File3-3 
  • Целевой каталог:

     Dir1/File1-1 Dir1/File1-2 Dir2/File2-1 Dir3/File3-1 

Я бы ожидал иметь только Dir1 / File1-2, Dir3 / File3-3 и без Dir2 в пункте назначения, когда я закончил. Я также НЕ ожидал, что Dir1 / File1-2 будет скопирован снова.

Что нужно отметить:

  • Это очень большие файлы, и я стараюсь не допустить их повторной копии, если это не нужно.
  • Содержимое исходных подкаталогов меняется каждый день
  • Предварительно определенный список меняется каждый день, но может / будет включать файлы во вчерашний список
  • В исходном каталоге есть 0 файлов. Он содержит только подкаталоги, содержащие файлы, необходимые для синхронизации
  • Подкаталоги в источнике довольно статичны. то есть Dir1, Dir2 и Dir3 всегда будут там

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

Обновление :

Прежде всего, я хочу поблагодарить jw013 за изменения форматирования. Я следил за рекомендацией, но не понимал, почему это правильно не форматируется (плакат первого раза).

Используя предложения от Serge , я придумал следующую команду, но по-прежнему не удаляет посторонние файлы из адресата, которые НЕ находятся в списке файлов.

  • команда

     rsync -avRP --prune-empty-dirs --delete-delay --ignore-existing $FILE_LIST destination/ 

3 Solutions collect form web for “rsync список файлов в подкаталогах на удаленный сервер и удаление посторонних”

Вы можете сделать это, используя

 rsync -av --delete --update --include-from=LISTFILE -f 'hide,! */' src/ dst 

где LISTFILE – это файл, содержащий все файлы, которые должны быть синхронизированы с целевым каталогом. Если ваши файлы не изменяются, вы можете использовать --ignore-existing вместо --update . Подробнее читайте на странице руководства rsync .

Существует ряд опций удаления, которые вы можете использовать с rsync для удаления файлов на целевом объекте, если они не существуют в источнике:

  --del an alias for --delete-during --delete delete extraneous files from dest dirs --delete-before receiver deletes before xfer, not during --delete-during receiver deletes during the transfer --delete-delay find deletions during, delete after --delete-after receiver deletes after transfer, not during 

Кроме того, вы можете использовать --ignore-existing для пропуска копирования файлов, существующих в целевом --ignore-existing :

  --ignore-existing skip updating files that exist on receiver 

И чтобы удалить пустые каталоги, вы должны использовать:

  -m, --prune-empty-dirs prune empty directory chains from file-list 

Итак, команда

 rsync -av --prune-empty-dirs --delete-delay --ignore-existing src/ dst 

будет делать то, что вы ищете, я полагаю

Я думаю, вам нужно сосредоточиться на --delete-excluded . Я пробовал его локально и, похоже, работает по своему желанию. Я бы начал с попытки

 rsync -a --delete-excluded --include-from=LISTFILE --exclude="*" src/ dst 

Я не уверен, почему предлагаются некоторые другие варианты: P. Самый «интересный» – это --ignore-existing . Возможно, стоит убедиться, что вы сначала поняли более дружеские оптимизационные возможности – -a , или -u .

Похоже, что вы уже используете -a , что подразумевает -t , что позволяет rsync оптимизировать по умолчанию. «Rsync находит файлы, которые необходимо перенести, используя алгоритм« быстрой проверки »(по умолчанию), который ищет файлы, которые изменились по размеру или в последнее время». Если вы не используете -a , часто можно использовать « -u или --update – пропускать файлы, которые являются более новыми на ресивере».

Если вы хотите сравнить разницу с отключенной оптимизацией «быстрой проверки», вы можете использовать --checksum . (Это также полезно, если вы хотите принудительно повторно синхронизировать все существующие файлы в какой-то момент в случае повреждения. Включите -v и вы сможете увидеть, какие файлы нужно было переписать).

  • создание образа устройства для сетевого расположения
  • Удалите файлы в месте назначения, которые находятся в источнике, используя rsync
  • Невозможно получить параметры rsync
  • Rsync dry-run statistics - Различные статистические данные после выполнения команд «cp» и «rsync»
  • Почему я получаю «rsync: не удалось установить время на ...: операция не разрешена (1)» ошибка на Ubuntu 10.10 с SME Server 7.4?
  • Понимание того, почему такое несоответствие в передаче сети?
  • rsync - включить файл верхнего уровня и исключить каталоги
  • `cp -al` snapshot, чьи жесткие ссылки будут перенаправлены на новый файл при редактировании
  • Использование rsync для резервного копирования 4 разных VPS на пятый VPS, который использует для хранения резервных копий
  • rsync - копировать содержимое каталога только в том случае, если определенный файл не существует
  • rsync и SMB
  • Interesting Posts

    Как очистить конфигурацию dbus?

    Fedora15 / Gnome3 – выйдите из режима повышенной привилегии

    Какой процесс / программа создает / записывает файл, к которому перенаправляется ввод-вывод?

    Перенаправление циклических команд grep для разделения файлов

    Могу ли я использовать совпадения grep для выполнения команды?

    Как я могу применить исправления программного обеспечения?

    Обработка URL-адресов GNU URL-адресами с UTF-8 – где это документировано?

    Самый быстрый способ создать файл с уникальными наносекундными метками 1MM

    du skip символические ссылки

    Невозможно восстановить или удалить файл в файловой системе ext4

    Как вы можете группировать символические ссылки с каталогами в выводе `ls`, но сказать разницу?

    electrum 2.6.4 Биткойн-кошелек на Debian Wheezy

    Блокировать весь трафик за исключением одного порта с pfctl для macOS

    Задайте локальный статический IP-адрес в сетевом интерфейсе и сохраните его даже после перезапуска

    Как поменять местами два поля, разделенные обратной косой чертой, и вывести их, разделенные знаком?

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