rsync --delete не работает

Sep 15 2020

ОС - Debian 10, rsync версии 3.1.3. Я запускаю rsync вот так:

time rsync -ar --delete --info=progress2 --files-from=filelist.txt . /path/to/dest

Это работает для копирования файлов, но не удаляет ничего, что было удалено. (Либо полностью удален из src, либо, в моем случае, удален из filelist.txt) Это огромная проблема. Единственный обходной путь, который я нашел, - просто уничтожить весь пункт назначения и просто скопировать все заново, но это занимает огромное количество времени и в основном сводит на нет смысл использования rsync в первую очередь.

Это ошибка? Как заставить rsync работать правильно, соблюдая флаг --delete, как и положено?

Редактировать:

Например:

  • Если filelist.txt содержит «foo», тогда / path / to / dest будет содержать «foo».
  • Если filelist.txt содержит «foo» и «bar», тогда / path / to / dest будет содержать «foo» и «bar».
  • Если filelist.txt содержит «foo», «bar» и «bat», тогда / path / to / dest будет содержать «foo», «bar» и «bat».
  • и т.д

Предположим, что "foo" "bar" "bat" и т. Д. Являются каталогами.

Ответы

3 laktak Sep 24 2020 at 14:24

Вам нужно указать rsync удалить недостающие аргументы:

rsync -arv --delete-missing-args --delete --info=progress2 --files-from=filelist.txt . /path/to/dest
  • Таким образом, если вы удалите каталог, fooон также будет удален /path/to/destс --delete-missing-args.
  • fooвсе еще нужно указать в filelist.txt.
  • --deleteаргумент требуется , чтобы Rsync удалять файлы в fooпапке
SandeepKothari Sep 28 2020 at 15:16

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

если вы его используете, --files-fromон попытается синхронизировать только перечисленные файлы от источника к месту назначения.

Он не удалит файлы только потому, что они отсутствуют в переданном списке файлов --files-from.

Для работы --delete вам нужно использовать фактический исходный путь .. вот так

rsync -ar --delete path/to/src path/to/destination