.
26 декабря 2014

Как добавить в архив только новые файлы

posted in NIX, Администрирование, Полезности, Программирование |

Перетаскиваю довольно крупный проект — в сжатом виде >40 Гб.
Даже физически файлы перетащить — по времени половина дня уйдёт.
Пока перетащил, настроил, потестил — уже заново нужно перетаскивать в силу произошедших на сайте изменений.
Вот тут то и пригодится очень полезная команда, вернее связочка, добавляющая в архив только файлы созданные/изменённые за последние N дней

find . -type f -mtime -10 -print0 | xargs -0 tar -cjf archive.tar.bz2

В закладки, полезняшки и т.д. однозначно!

P.S.

ВНИМАНИЕ — на рабочем проекте у меня такая связка даёт сбой!!! думаю из за ограничения на длину данных передаваемых xargs

такая конструкция вроде пашет

find . -type f -mtime -10 -print0 | zip archive.zip @

ещё экспериментирую с параметром -n в xargs — пока безрезультатно

P.S.S.
Спасибо большое drBatty за помощь в решении проблемы в ветке форума

всё правильно: xargs режет список аргументов дозами по несколько сотен...тысяч имён файлов. Дальше у вас записано «tar --create» что значит «создать архив». Он и создаётся несколько раз. Вы наблюдаете только последний вариант.

Если вы хотите делать обязательно так, то вам следует использовать --append, которая не работает для сжатых файлов, потому вам следует ещё потом сжать, как в третьем варианте.

А вообще мне понравился вариант с промежуточным файлом — сначала выдёргиваем в файл все файлы find-ом, потом уже скармливаем его tar-у

#!/bin/bash
set -x
TMP=$(mktemp)
find -mtime -10 >$TMP
tar --create --files-from $TMP
rm --force $TMP

Яндекс.Метрика