rsync не может удалить непустую директорию


10

При синхронизации удаленного резервного копирования я получаю сообщение об ошибке rsync cannot delete non-empty directory.

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

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

Я хотел бы пропустить загрузку определенных файлов (потому что они слишком велики для моей скорости загрузки), но я хочу сохранить те, которые я уже загрузил некоторое время назад, если они существуют локально . Если они не существуют локально, их следует удалить. --delete-исключить удалит их все на удаленной стороне.

Это также означает, что если каталог больше не существует локально, его следует удалить, даже если он содержит исключенные файлы.

Можно ли настроить rsync для достижения этой цели?

Ответы:


5

Используйте pмодификатор:

P указывает, что правило является скоропортящимся, что означает, что оно игнорируется в каталогах, которые удаляются. Например, правила по умолчанию опции -C, которые исключают такие вещи, как «CVS» и «* .o», помечены как скоропортящиеся, и не будут препятствовать удалению каталога, который был удален в источнике, в месте назначения.

Например, я использую -Fопцию, которая «говорит rsync искать файлы для каждого каталога .rsync-filter, которые были разбросаны по иерархии, и использовать их правила для фильтрации файлов при передаче».

Мой .rsync-filterсодержит строки, подобные этим, чтобы отфильтровать эти «пометы», которые Mac оставляют после себя:

-p .DS_Store
-p ._*

При использовании excludeвместо просто -добавьте запятую. Например :

exclude,p .DS_Store
exclude,p Thumbs.db

0

Вы можете использовать модификаторы шаблона include / exclude, дополнения к шаблону, который вы использовали. Он сообщает rsync, что исключает правило только для стороны отправки.

-n: проверять только то, что будет удалено на desc, не удалять шаблон: * .sh desc: / home / kg / tmp

цель: хотите удалить конец файла .sh на деск, но если вы это сделаете, вы не сможете удалить на деск: rsync -rvz --exclude * .sh --delete -n conkg kg@192.168.31.202: / главная / кг / TMP

должен измениться на: добавьте -n при тестировании: rsync -rvz --exclude-from del.txt -n - удалить conkg kg@192.168.31.202: / home / kg / tmp real delete: rsync -rvz - exclude-from del.txt - удалить conkg kg@192.168.31.202: / home / kg / tmp cat del.txt -s * .sh

или: rsync -rvz --exclude -s * .sh - удалить conkg kg@192.168.31.202: / home / kg / tmp


-2

просто используйте опции --max-size = xx и --delete в rsync. Он будет делать все автоматически и отвечать всем вашим требованиям.


В лучшем случае это будет обходной путь. Я хочу полностью пропустить файлы mov, avi и cr2, потому что они обычно очень большие. Но те, которые я уже выложил на более быстрой линии некоторое время назад, должны быть сохранены. Теперь проблема в том, что самые большие файлы JPG больше, чем самые маленькие файлы CR2, поэтому это решение не идеальное. Я бы предпочел использовать функцию исключения для фильтрации имен файлов.
marlar
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.