Создайте .tar.gz из каталога, опускающего некоторые подкаталоги, и добавьте только новые или измененные файлы

Если $X параметр, где новая версия хранится,

ed file << EOF
g/^version =/s/.*/version = '$X'/
g/^release =/s/.*/release = '$X'/
w
q
EOF

Это принимает $X имеет рыночную стоимость, как 1.2.3-foo, и никакие символы, которые специальны для ed интерпретатор команд.

2
18.06.2013, 04:25
2 ответа

Для вставки текущей даты в имя файла звоните date команда в замене команды.

tar -czf monitor-$(date -d %Y-%m-%d).tar.gz …

Я рекомендую использовать формат дня месяца года для даты по нескольким причинам: лексикографический порядок соответствует хронологическому порядку; нет никакого риска беспорядка между американским дневным годом месяца и заграничным дневным годом месяца; это - стандарт ISO.

Для исключения нескольких каталогов необходимо повториться --exclude для каждого из них: если Вы пишете tar -czf monitor.tar.gz --exclude dir1 dir2, затем dir2 путь должен включать в архив, только dir1 аргумент --exclude.

tar -czf monitor-$(date -d %Y-%m-%d).tar.gz --exclude /var/www/html/monitor/cache /var/www/html/monitor/log /var/www/html/monitor

Хранить файлы, которые были изменены после определенной даты, передача --newer опция. Можно указать или ссылочный файл или дату. Это намного более надежно для работы с файлом метки времени: создайте тот файл перед каждым резервным копированием и используйте файл метки времени от предыдущего резервного копирования как ссылка для следующей.

touch monitor-backup.timestamp.new
tar … --newer=./monitor-backup.timestamp
mv -f monitor-backup.timestamp.new monitor-backup.timestamp

Вы, кажется, прокручиваете свою собственную систему инкрементного резервного копирования. Это удивительно трудно сделать надежно. Я рекомендую использовать существующее приложение резервного копирования, такое как Двуличность.

2
27.01.2020, 22:14
  • 1
    +1 для упоминания Двуличности. Намного легче затем прокрутка Ваше собственное! –  slm♦ 18.06.2013, 04:15
  • 2
    @Guilles я не пытаюсь получить свою собственную систему инкрементного резервного копирования я просто, хочет новый tar.gz файл каждый раз, но только с файлами, измененными или добавленными от стартовой точки. Посмотрите мой выпуск в основном –  Reynier 18.06.2013, 04:20
  • 3
    @Reynier, Что Вы делаете, является инкрементным резервным копированием (при гранулярности файлов). Опции tar, которые я дал Вам, делают все, что Вы спрашиваете, но я рекомендую использовать специальный инструмент, тем не менее. –  Gilles 'SO- stop being evil' 18.06.2013, 10:18
  • 4
    @Gilles позволил мне видеть, понял ли я процесс: 1 Создают первый файл при помощи tar -czvf monitor-$(date -d %Y-%m-%d).tar.gz --exclude /var/www/html/monitor/cache --exclude /var/www/html/monitor/log, 2 Создают файл метки времени при помощи touch monitor-backup.timestamp.new, 3 Создают остальную часть файлов при помощи tar -czvf monitor-$(date -d %Y-%m-%d).tar.gz --exclude /var/www/html/monitor/cache --exclude /var/www/html/monitor/log --newer=./monitor-backup.timestamp, 4 Перемещения файлы при помощи mv -f monitor-backup.timestamp.new monitor-backup.timestamp это правильно? –  Reynier 18.06.2013, 16:42

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

tar -zcvf /home/monitor.tar.gz /var/www/html/monitor --exclude /var/www/html/monitor/cache --exclude /var/www/html/monitor/log

Что касается части добавления даты, с Вашим объяснением того, что Вы ищете, я думаю, что можно использовать:

-d, --diff, --compare
      find differences between archive and file system

править: Вот быстрый небольшой сценарий, чтобы сделать это. Нет никакой проверки ошибок или чего-либо, но это - запуск.

NEW_FILE="monitor.`date +%d.%m.%Y`.tar.gz"
PREV_FILE={However you want to find this}

tar cf $NEW_FILE `tar --diff -f $PREV_FILE  | awk --field-separator=: '{print $1}' | uniq`
0
27.01.2020, 22:14
  • 1
    видит мой выпуск и для --update Я хочу создать некоторое различие для сокращения размера файла. Менее сказанный, например, первый файл будет иметь 20 МБ, но второй будет иметь только 20 КБ, потому что только два файла были отредактированы, это - то, что я хочу –  Reynier 18.06.2013, 01:32
  • 2
    , я добавил часть об использовании --diff который может быть полезен для Вас здесь. –  pferate 18.06.2013, 01:53

Теги

Похожие вопросы