2009-07-14 5 views
1

This question отмечает, что при создании архива tar можно перезаписать файлы, и я пытаюсь понять, как избежать этой ситуации.Как избежать склеивания файлов при создании архива tar

Как правило, я использую ролик для файлов, но установленная версия немного разыгрывается (с использованием 1,1 Гб памяти), и я не являюсь системным администратором.

Я посмотрел на --confirmation и --interactive, но это только спрашивает меня, хочу ли я добавить файл x в архив, а не хочу ли я перезаписать существующий файл. Например,

tar --interactive -czvf innocent_text_file.txt foo* 

спросит меня о каждом файле, но совершенно счастлив перезаписать innocent_text_file.txt

Есть ли переключатель, который действует как -i для ф?

Примечание Я прошу о создании архива, а не извлечении архива.

Разъяснение Что я беспокоюсь о случайно делает что-то вроде этого

tar -czvf * #Don't do this! 

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

cp -i * #Don't do this! 

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

ответ

1

Если я понял ваш вопрос правильно, это следует сделать трюк

-k, --keep-старые-файлы сохранить существующие файлы; не перезаписывать их из архива

+0

Кажется не работает. innocent_text_file.txt перезаписывается, когда дается ошибочная команда tar для создания архива *. –

+0

Параметр -keep-old-files предназначен для извлечения только – steveayre

0

Как насчет «u» (обновление) вместо «c» (создать)? например, tar -uzvf

Это должно только добавлять (и перезаписывать) файл, если он новее, чем тот, который находится в архиве.

+0

Извините, это тоже не помогает. –

0

Это элементы управления перезаписи, в то время как извлечение из смолы.

Overwrite control: 

-k, --keep-old-files don't replace existing files when extracting 
    --keep-newer-files don't replace existing files that are newer than 
         their archive copies 
    --no-overwrite-dir preserve metadata of existing directories 
    --overwrite   overwrite existing files when extracting 
    --overwrite-dir  overwrite metadata of existing directories when 
         extracting (default) 
    --recursive-unlink empty hierarchies prior to extracting directory 
    --remove-files  remove files after adding them to the archive 

Но, вы обратитесь к cp -i и tar c операций для справки.
Это подразумевает, что вас интересует , обновляющий архив, который не перезаписывает существующую копию в tar с новой версией. Я подозреваю, что управление не доступно напрямую с помощью tar.
Я также задаюсь вопросом о необходимости такой схемы.

Однако один из способов сделать это будет следующим.
Поскольку вы беспокоитесь о перезаписывании в архив, мы уверены, что у вас есть существующий частичный tar каталога (скажем files.tar).

cd base/dir/to/be/tarred 
tar tf path/to/files.tar | sort > archived-files.lst 
find . -type f | sort > files.lst 
diff archived-files.lst files.lst | grep "^>" | cut -c 3- > new.lst 
tar uf -T new.lst 

Обратите внимание, что это update работает только на несжатых архивов.
Итак, если ваш архив сжимается gunzip/bunzip2, он должен соответствовать этой последовательности.
и, затем повторно сжать его в конце.

+0

Я спрашиваю о создании архива, а не извлечении. –

+0

Да, я понял, но это звучит как необычное требование. Вы действительно хотите сохранить первую копию файла в архиве, даже если его изменение/обновление в реальном каталоге? – nik

+0

Я добавил разъяснение в конце исходного вопроса. Теперь это имеет смысл? –

1

Если я правильно понимаю ваш вопрос, я считаю, что это должно на хитрость:

деготь -cv * | gzip> myfile.tgz