rsync не може видалити непорожній каталог


10

Під час синхронізації віддаленої резервної копії я отримую помилку rsync cannot delete non-empty directory.

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

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

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

Це також означає, що якщо каталог більше не існує локально, його слід видалити, навіть якщо він містить виключені файли.

Чи можна налаштувати rsync для цього?

Відповіді:


5

Використовуйте pмодифікатор:

Р p вказує на те, що правило є швидкопсувним, це означає, що воно ігнорується в каталогах, які видаляються. Наприклад, правила за замовчуванням для параметра -C, які виключають такі речі, як "CVS" та "* .o", позначаються як швидкопсувні, і не перешкоджатимуть видаленню каталогу, видаленого з джерела, у пункті призначення.

Наприклад, я використовую -Fопцію, яка "вказує rsync шукати файли per-каталога .rsync-фільтру, які були розпорошені через ієрархію, і застосовують їх правила для фільтрації файлів при передачі".

Мій .rsync-filterмістить такі рядки, щоб відфільтрувати ці "відмітки", які Маки залишають після себе:

-p .DS_Store
-p ._*

Якщо ви використовуєте excludeзамість просто -, додайте кому. Наприклад :

exclude,p .DS_Store
exclude,p Thumbs.db

0

Ви можете використовувати модифікатори шаблону "включити / виключити", доповнення для використовуваного шаблону. Він повідомляє rsync, що виключає правило лише для сторони надсилання.

-n: перевірити лише те, що буде видалено на desc, не видаляйте шаблон: * .sh desc: / home / kg / tmp

мета: хочуть видалити кінець файлу .sh на desc, але якщо це зробити, ви не можете видалити його на desc: rsync -rvz --exclude * .sh --delete -n conkg kg@192.168.31.202: / домашній / кг / тм

слід змінити на: будь ласка, додайте -n під час тестування тесту: rsync -rvz --exclude-from del.txt -n - видалити conkg kg@192.168.31.202: / home / kg / tmp реально видалити: rsync -rvz - виключити-з 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, тому це рішення не є ідеальним. Я б скоріше скористався функцією виключення для фільтрації на імена файлів.
марла
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.