Как обновить tar (НЕ дописывать) - PullRequest
2 голосов
/ 14 декабря 2011

Я хочу обновить существующий файл tar с помощью более новых файлов.

В GNU я прочитал:

4.2.3 Обновление архива

В предыдущем разделе вы узнали, как использовать «--append» для добавления файла в существующий архив.Связанная операция - '--update' ('-u'). Операция '--update' обновляет архив tar, сравнивая дату указанных членов архива с датой файла с тем же именем.Если файл был изменен позднее, чем участник архива, то более новая версия файла добавляется в архив (как в случае с '--append') .

Однако, когдаЯ запускаю команду обновления tar, файлы добавляются, даже если даты их изменения совпадают.Я хочу ТОЛЬКО добавить, где даты изменения файлов, которые будут заархивированы, являются более новыми, чем даты, уже находящиеся в tar ...

tar -uf ./tarfile.tar /localdirectory/ >/dev/null 2>&1

В настоящее время каждый раз, когда я обновляюсь, tar удваивается в размере ...

Ответы [ 4 ]

3 голосов
/ 14 декабря 2011

Обновление, которое вы описываете, подразумевает, что файл в архиве заменен .Если новая копия меньше, чем в архиве, она может быть переписана напрямую.Однако, если новая копия больше, tar должен будет обнулить существующую запись архива и добавить.Такие обновления оставляли бы \ 0 или другие неиспользуемые байты, поэтому любой обычный компьютерный пользователь хотел бы, чтобы такие разделы были удалены, что было бы сделано путем "перемещения вверх" байтов, содержащих содержимое архива, к началу файла (думаю, Cmemmove).

Однако такая операция перемещения на месте, которая включает циклы поиска-чтения-поиска-записи, стоит дорого , особенно если смотреть на нее в контексте лент- для какого tar был изначально разработан, т. Е. Устройства с производительностью поиска, не сопоставимой с жесткими дисками.Вы бы довольно быстро изнашивали ленту с такими операциями.Да, и, конечно, устройства WORM также не поддерживают эту операцию.

1 голос
/ 26 марта 2018

Если вы не хотите использовать ключ "-P", tar -u ... работает правильно, если текущим каталогом является каталог parent того каталога, который мы собираемся обновить, и путь к этому каталогу в команде tar будет , а не будет абсолютным путем.
Например:
Мы хотим обновить каталог / home / blabla / Dir. Мы делаем это так:
cd / home / blabla
tar -u -f tarfile.tar Dir
Как правило, обновление должно производиться с того же места, что и создание, чтобы пути были согласованы.
Также возможно:
CD / Home / Blabla / Dir
tar-u -f /path/to/tarfile.tar.

1 голос
/ 26 июля 2016

Вы можете просто создавать (вместо обновления) архив каждый раз:

tar -cvpf tarfile.tar *

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

1 голос
/ 14 декабря 2011

Внимание!Говоря о «датах», это означает любую дату, и это включает в себя время доступа.

Если к вашим файлам обращались любым способом (достаточно простого ls -l), тогдаtar правильно делает то, что делает!

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

...