rsync 'не может удалить непустой каталог' ошибки, даже с - опция силы

Просто используйте переменную, как это:

KEY=$(cat ~/.ssh/id_rsa.pub) ssh -p <port> <user>@<hostname> "if [ -z \"\$(grep \"$KEY\" ~/.ssh/authorized_keys )\" ]; then echo $KEY >> ~/.ssh/authorized_keys; echo key added.; fi;"
27
задан 6 February 2014 в 11:33
5 ответов

Вы пытались добавить - delete-excluded ?

Если вы удалите каталог в исключенных папках на "удаленной" стороне, rsync --delete не удалит исключенную папку на вашем "локальном" сайте.

38
ответ дан 28 November 2019 в 20:05

Каталог должен быть пустым, чтобы вы могли его удалить, файловая система обычно требует этого.

Поэтому обычно rsync или rm ] сначала рекурсивно удалял бы все содержимое, а только потом удалял теперь пустой каталог.

Если текущий пользователь не является владельцем всех файлов, разрешения файловой системы не позволят вам удалить эти файлы. Поскольку они не будут удалены, каталог не будет очищен, и удаление не удастся.

Я сначала предполагаю, что некоторые файлы в этом каталоге принадлежат другому пользователю, например, apache или пользователям none.

-1
ответ дан 28 November 2019 в 20:05

Вот возможные источники этой проблемы:

(1) Эта ошибка может быть результатом параметра -b (--backup). Эта опция создает резервную копию каждого удаленного файла, добавляя тильду ( ~ ) к его имени файла. (Это меня смутило, поскольку имя файла явно является резервной копией, а имя каталога - нет, так как вы не видите тильду.)

Чтобы проверить, так ли это, прочтите целевой каталог на самый глубокий уровень и проверьте, есть ли конечный файл тильды (~). Обратите внимание, что эти имена-файлов с добавлением тильды становятся невидимыми в некоторых распространенных системах просмотра файлов, поэтому вы можете их не видеть.

Чтобы решить эту проблему, выберите параметр --backup-dir = DIR, например - backup-dir = .rsync_bak.

(2) Параметр --exclude может иметь те же результаты. Что, возможно, происходит в вашем случае. Система шаблонов мощная, но может вводить в заблуждение. Например, если вы напишете --exclude = '* ~', все файлы, заканчивающиеся тильдой, будут пропущены, в результате получится точно так же, как в случае (1) выше.

из справочной страницы rsync:

если шаблон начинается с / затем он привязан к конкретному место в иерархии файлов, в противном случае оно сравнивается с конец пути

Si, если вы напишете --exclude = uploads, это исключит все файлы с именем «updloads» на любом уровне вашего дерева файлов.

Проверьте, есть ли файл с именем "uploads" в ваших каталогах, которые нельзя удалить.

Решением было бы заменить "--exclude = uploads" на "--exclude = uploads /"

6
ответ дан 28 November 2019 в 20:05

В моей настройке ((источник - тип формата Ubuntu ext4 для целевого типа fuseblk Western Digital) он работает с:

rsync -a -v --progress --modify-window=1 -c -b -i -s -m --del -vv --ignore-errors --chmod=ugo=rwx --delete --delete-excluded  --exclude='*~'  --exclude='.*' --backup-dir=.rsync_bak /home/test /media/user/usbHDD
0
ответ дан 28 November 2019 в 20:05

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

Подробнее см. в этом ответе .

0
ответ дан 28 November 2019 в 20:05

Теги

Похожие вопросы