AddThis Smart Layers

воскресенье, 24 января 2016 г.

Инкрементное архивирование файлов при помощи команды tar

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

Но, зачастую справка слишком лаконична и не всегда понятны те или иные ньюансы использования опций требуемой команды.
Именно это и является причиной написания данной шпаргалки.



Сегодня я рассмотрю частный (и частый) случай, когда необходимо создать инкрементный архив файлов из заданной директории.

Допустим, у нас имеется директория /home/user/public_html/media, в которой файлы часто обновляются и добавляются новые.
Данная директория содержит некоторое количество поддиректорий, среди которых присутствует директория с кешируемыми копиями файлов, которую нет необходимости добавлять в архив.

1. Использование ключа -N

Данный ключ добавит в существующий архив только те файлы, которые новее существующих в нем, а также удалит из архива файлы старше указанной даты.
# tar -N 'YYYY-MM-DD HH:MM:SS' -zcvf archive.tar.gz media/catalog/

Таким образом, архив archive.tar.gz каждый раз будет очищаться от старого содержимого, которое будет замещаться более свежим, начиная с указанной даты и времени.
Кстати, если время не существенно, его можно не указывать.

2. Использование ключа -u

Этот ключ обновляет существующий архив не удаляя существующие в нем файлы, а лишь добавляя в него более новые.
# tar -zuvf archive.tar.gz media/catalog/

3. исключение файлов и директорий

# tar -N 'YYYY-MM-DD HH:MM:SS' --exclude=file1 --exclude=pattern* --exclude=media/catalog/cache/* -zcvf archive.tar.gz media/catalog/

Опция --exclude может быть использована для исключения как единичных файлов, так и целых директорий, либо отдельных файлов соответствующих указанному паттерну.

Примечание: если требуется указать несколько различных исключений, все они перечисляются каждый раз используя опцию --exclude. Т.е. в одной опции нельзя перечислить несколько исключений сразу.

Если список исключений достаточно длинный, имеет смысл использовать другую опцию --exclude-from=file. Где file - это обычный текстовой файл со списоком исключений, где каждое исключение указывается на новой строке.
Например:
# tar -N 'YYYY-MM-DD HH:MM:SS' --exclude-from=excludes.list -zcvf archive.tar.gz media/catalog/

Комментариев нет :

Отправить комментарий