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

Можно ли исключить пустые каталоги при создании 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), работают только когда у вас одна папка, а у меня их три.

решение1

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

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

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

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

На самом деле, здесь показано, как "перенаправить" вывод команды find в tar. Вам придется игнорировать все эти "новее, чем", о которых спрашивает парень.

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

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

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

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

решение2

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

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

Связанный контент