Назад | Перейти на главную страницу

rsync --include-from и delete = лишние файлы удалены

У меня есть 2 каталога: src и dst. Src содержит только 1 файл "index.php". Dst содержит "index.php" И "readme.txt". У меня также есть файл list.txt, который содержит только одну строку: «index.php».

Теперь, находясь в каталоге, содержащем как src, так и dst, я выполняю следующую команду:

rsync -av --include-from=list.txt src/ dst/ --del  

Он обновляет файл "index.php", если это необходимо, НО он также удаляет readme.txt.

Почему его удаляет, если его нет в файле list.txt? Есть ли простой способ «исправить» такое поведение?

В основном я хочу, чтобы rsync заботился только о файлах из списка. Они могут нуждаться в обновлении или удалении (например, параметр --del), но я не хочу, чтобы он касался других файлов. Я не могу использовать параметр «--files-from», потому что он не удаляет файлы в месте назначения.

РЕДАКТИРОВАТЬ: «index.php» был здесь просто примером - на самом деле слишком простым примером, потому что src и dst могут содержать целые деревья каталогов, поэтому, если list.txt имеет запись типа «abc / test.php», она также должна работать для этот файл.

Это может показаться излишним, однако у меня это сработало:

rsync -r -av --include-from=list.txt --files-from=list.txt --delete-missing-args src/ dst/

однако он будет специально обновлять файл в зависимости от того, какой из них был обновлен / удален.

т.е. если файл с тем же именем находится в другом подкаталоге, он не будет изменен или удален, а только изменится или удалится в зависимости от того, где он находится в src / parent-directory.

Решение - добавить --exclude=*:

 rsync --verbose  -r --del --include-from=list.txt --exclude=* src/ dst/

Обновит только файлы из list.txt и удалить из dst только если они отсутствуют в src и включены в list.txt.