Удаляет ли tar -xvf существующие файлы из каталога?

19409
Felicia

У меня есть архив tar, и я хочу использовать tar -xvf.
В этом архиве tar у меня есть дерево каталогов, содержащее пару файлов. В моей системе Solaris 10 это дерево каталогов уже существует и содержит несколько файлов.
Если я распаковываю архив, все дерево каталогов перезаписывается или только файлы, содержащиеся в архиве, перезаписываются?
Будут ли удалены файлы, у которых нет корреспондента в архиве?

10
Вы всегда можете создать тестовый .tar и тестовый каталог и попробовать его ... ответ, который вы придумали сами, будет длиться намного дольше, чем ответ, данный вам кем-либо здесь. Jarvin 14 лет назад 0
Ответ - нет. Если вы подумаете достаточно внимательно, вы поймете, что нет никакого смысла в том, что программа для извлечения файлов из архива удалит полностью несвязанные файлы. Fosco 14 лет назад 0

2 ответа на вопрос

5
BloodPhilia

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

Dir /test

/1/a c 

Архив test.tar

/1/b d 

вероятно будет объединен с:

/1/a /1/b c d 

Добавление -kфлага в команду tar гарантирует, что ни один из файлов в вашей целевой директории не будет перезаписан:

tar -xvkf test.tar 
@BP: Перезапись может зависеть от оболочки, так как csh (все еще оболочка по умолчанию для Sun?) Имеет переменную оболочки «noclobber», которая при установке предотвращает случайное поведение при перезаписи. hotei 14 лет назад 0
Спасибо BloodFhilia и Хотей. Я провел тест в моей системе, и tar -xvf перезаписывает файлы, которые уже существуют, и добавляет те, которые не существуют. Я хотел бы знать, есть ли вероятность, что весь каталог должен быть перезаписан и, таким образом, потерять файлы, которые были в моей системе в этом каталоге, но не были в архиве? Например: у меня есть в dir.tar dir / file2. В моей системе у меня есть dir / file1, dir / file2 и dir / file3. Возможно ли, что если я выполню tar -xvf dir.tar, весь dir будет перезаписан и больше не будет содержать file1 и file3? Felicia 14 лет назад 0
@hotei: `noclobber` (который также существует в оболочках POSIX, кстати) влияет только на файлы, перенаправленные на`> foo` в оболочке. Это не влияет на смолу. Gilles 14 лет назад 0
@hotei noclobber предотвращает перезапись файлов путем перенаправления в оболочке. Так что `echo foo> bar.txt` не будет перезаписывать bar.txt, если он существует. Это не влияет на то, что программа, такая как tar, будет перезаписана. KeithB 14 лет назад 0
@Felicia: Согласно Single Unix, tar не удалит файлы, которых не было в архиве. Он перезапишет существующие файлы с содержимым (но не режимами) из архива. Вокруг могут быть несоответствующие тары, но я сомневаюсь, что любой из них перезапишет несвязанные файлы, такие как `dir / file1`. Gilles 14 лет назад 1
@ Жиль: Ваш комментарий очень полезен. Большое спасибо. Felicia 14 лет назад 0
0
hotei

Самый простой способ - создать новый пустой каталог, перейти к нему и извлечь из него файлы. Вы должны быть осторожны, хотя извлеченные файлы являются относительными (начинаются с ./) и не абсолютными (начинаются с /). Пролистайте оглавление через less, чтобы увидеть, что происходит, если вы не знаете (tar -tvf tar_filename | less)

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

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