Получение разрешений RSNAPSHOT вправо

-delete подразумевает -depth , который не работает с -prune ( -depth начинается с листьев). Об этом есть предупреждение в руководстве к версии GNU ( -delete - это расширение FreeBSD, которое теперь также поддерживается GNU find и некоторыми другими реализациями).

info find --index-search=-delete

Использование действия '-delete' в командной строке автоматически включает параметр '-depth' (* обратите внимание на выражения find: :). Это может вызывать удивление, если вы раньше просто тестировали с помощью '-print', поэтому обычно лучше не забывать явно использовать '-depth'.

info find --index-search=-prune

Поскольку '-delete' подразумевает '-depth', использование '-prune' в сочетании с '-delete' вполне может привести к удалению большего количества файлов, чем предполагалось .

Здесь у вас есть возможность использовать вместо этого rm :

find . -name save -prune -o -type f -exec rm -f {} +

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

Более безопасная альтернатива:

find . -name save -prune -o -type f -execdir rm -f -- {} \;

Это не имеет упомянутой выше проблемы, но означает запуск одного rm для каждого файла. - необходим для реализации FreeBSD, а не для GNU, которая ставит перед именами файлов префиксы ./ .

В качестве альтернативы, как было предложено Костасом:

LC_ALL=C find . ! -name save ! -path '*/save/*' -type f -delete

(но он по-прежнему без нужды спускается в каталоги save )

LC_ALL = C существует, поэтому * соответствует любой последовательности байтов (даже тем, которые не образуют допустимые символы в текущей локали). Обратите внимание, что это повлияет на язык сообщений об ошибках (английский вместо языка пользователя).

0
14.10.2018, 19:41
1 ответ

На самом деле опция sudo сама по себе не работает, потому что говорит, что не может писать в папку /mnt/Server1/Backup

     [dom ott 14, 01:15 ][antonio@gaia:~]sudo rsnapshot alpha
     [sudo] password di User1: 
     ----------------------------------------------------------------------------
     rsnapshot encountered an error! The program was invoked with these options:
     /usr/bin/rsnapshot alpha 
     ----------------------------------------------------------------------------
     ERROR: Could not mkpath("/mnt/Server1/Backup/rsnapshot/alpha.0/", 0, 0755);

Я нашел обходной путь. У rsnapshot была возможность указать, куда записывается файл PID. Я установил это так:

     lockfile   /mnt/Server1/Backup/rsnapshot

Я также назначил резервную группу для указанной выше папки. Наконец, я также понял, что rsnapshot даже не использует SSH, потому что удаленная папка смонтирована на Client1 через NFS.

3
28.01.2020, 02:31

Теги

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