Моя цель - создать инкрементную резервную копию tar.gz для папки /data .

Для этого я хочу получить список файлов, которые были изменены после последнего резервного копирования. Этот момент хранится в файле с именем lastran.txt .

Я использую следующую команду, чтобы получить этот список:

find /data -newer lastran.txt -not -type d -print 0

Я передаю результаты этой команды в команду xargs -0 tar .

Моя проблема в том, что результаты команды find содержат набор файлов в одной или нескольких папках, которые я не хочу добавлять в архив.

Я попробовал параметр --except-from tar с файлом, который я назвал folder-exclusion.lst который содержит список папок:

/data/backups
/data/cloud
/data/system

Но это не похоже на работу.

1 ответ1

0

Несколько вариантов, возьмите один:

  1. Проверьте rdiff-backup, возможно, вы заново изобретаете колесо.

  2. Скажите find чтобы исключить некоторые шаблоны в первую очередь. Используйте -wholename как это:

    find /data -newer lastran.txt -not -type d -not -wholename "/data/backups/*" -not -wholename "/data/cloud/*" -not -wholename "/data/system/*" -print 0
    
  3. Возьмите оригинальную find и отфильтруйте ее вывод:

    find /data -newer lastran.txt -not -type d -print 0 | grep -Ezv "^/data/backups/|^/data/cloud/|^/data/system/"
    
  4. Исправьте вашу folder-exclusion.lst . Мой опыт работы с tar ограничен, и я не могу найти ничего о параметре --except-from . Если вы уверены, что это правильный вариант, то комментарий AFH может быть правильным:

    похоже, что ваш файл исключений должен быть списком шаблонов, поэтому каждая строка должна иметь /* в конце, например /data/backups/* и т. д.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .