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

10

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

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

Ответы:

6

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

Dir /test

/1/a
c

Архив test.tar

/1/b
d

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

/1/a
/1/b
c
d

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

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

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

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

Хотей
источник