Назад | Перейти на главную страницу

Можно ли исключить пустые каталоги при создании tar?

У меня есть команда резервного копирования, которая выглядит так:

tar cvpzf /backup/incremental-$now.tar.gz --after-date='1 day ago' -C / etc/ home/ root/  --exclude-from=/root/exclusion_list.txt --warning=no-file-unchanged > /backup/log-$now.txt 2>&1

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

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

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

ГЛАВНОЕ ОБНОВЛЕНИЕ: сначала мне нужно серьезно извиниться за мою небрежную вставку. Это был поздний вечерний пост, и я был не на пике своего интеллекта ...

Правильный пост на форуме Вот. На самом деле это один и тот же человек, который задает тот же вопрос на другом форуме и получает совершенно другой ответ. Я добавил в закладки оба, когда столкнулся с проблемой, и дал ссылку не на ту.

На самом деле то, что здесь показано, - это способ «перенаправить» вывод команды find в tar. Вы должны игнорировать все, о чем спрашивает парень «новее».

Вместо этого вам нужна следующая часть поиска:

find . -type d ! -empty | ...

Конечно, вы должны заменить точку (".") На путь, по которому вам нужно запустить find / tar. После канала продолжайте использовать команду tar согласно второй ссылке (правильной).

Еще раз мне очень жаль, если я вызвал какие-либо проблемы из-за того, что не уделял внимания деталям.

Другой способ, который работает только в том случае, если вы изменили лишь небольшой набор файлов:

tar cvzf [...] `find . -mtime -1 -type f`

Если у вас большой набор изменений, вы можете выгрузить измененный список файлов в файл и использовать параметр --files-from в своей команде tar:

find . -mtime -1 -type f > /tmp/changed.txt
tar cvzf [...] --files-from=/tmp/changed.txt

или в одну строку

find . -mtime -1 -type f | tar cvzf [...] --files-from=/dev/stdin