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


Перетаскиваю довольно крупный проект — в сжатом виде >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


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *