Czy tar -xvf usuwa istniejące pliki z katalogu?

10

Mam archiwum tar i chcę z niego korzystać tar -xvf.
W tym archiwum tar mam drzewo katalogów zawierające kilka plików. W moim systemie solaris 10 to drzewo katalogów już istnieje i zawiera kilka plików.
Jeśli rozpakuję archiwum, czy całe drzewo katalogów zostanie zastąpione, czy tylko pliki zawarte w archiwum zostaną zastąpione?
Czy pliki, które nie mają korespondenta w archiwum, zostaną usunięte?

Felicia
źródło
Zawsze możesz utworzyć testowy plik .tar i katalog testowy i wypróbować go ... odpowiedź, którą sam sobie wymyślisz, będzie trwać o wiele dłużej niż odpowiedź udzielona przez kogokolwiek tutaj.
Jarvin
Odpowiedź brzmi nie. Jeśli zastanowisz się wystarczająco, zdasz sobie sprawę, że nie ma sensu, aby program, który wypakował pliki z archiwum, usunąłby całkowicie niepowiązane pliki.
Fosco,

Odpowiedzi:

6

Zduplikowane pliki, które już istnieją, mogą, ale nie muszą być rozpakowane i zastąpione w zależności od systemu. Jednak zazwyczaj działa domyślnie. Pliki, które znajdują się w archiwum, ale nie są w systemie, zostaną po prostu dodane do nowych lub istniejących katalogów w systemie.

Reż /test

/1/a
c

Archiwum test.tar

/1/b
d

prawdopodobnie zostanie połączony z:

/1/a
/1/b
c
d

Dodanie -kflagi do polecenia tar zapewni, że żaden plik w katalogu docelowym nie zostanie nadpisany:

tar -xvkf test.tar
BloodPhilia
źródło
@BP: Zastąpienie może zależeć od powłoki, ponieważ csh (wciąż domyślna powłoka w Sun?) Miała zmienną powłoki „noclobber”, która po ustawieniu zapobiega przypadkowemu zachowaniu nadpisywania.
hotei
Dzięki BloodPhilia i hotei. Zrobiłem test w moim systemie i tar -xvf zastępuje pliki, które już istnieją i dodaje te, które nie istnieją. Chciałbym wiedzieć, czy istnieje możliwość zastąpienia całego katalogu, a tym samym utraty plików, które były w moim systemie w tym katalogu, ale nie były w archiwum? Na przykład: Mam w dir.tar dir / file2. W moim systemie mam katalog / plik1, katalog / plik2 i katalog / plik3. Czy to możliwe, że jeśli wykonam polecenie tar -xvf dir.tar, cały katalog zostanie nadpisany i nie będzie już zawierać pliku1 i pliku3?
Felicia
@hotei: noclobber(który również istnieje w powłokach POSIX btw) wpływa tylko na pliki przekierowane za pomocą >foow powłoce. Nie ma wpływu na smołę.
Gilles „SO- przestań być zły”
@hotei noclobber zapobiega nadpisywaniu plików przez przekierowanie w powłoce. Więc echo foo > bar.txtnie zastąpi bar.txt, jeśli istnieje. Nie ma to wpływu na to, co program, taki jak tar, nadpisze.
KeithB
1
@ Felicia: Według Single Unix, tar nie usunie plików, które nie były w archiwum. Zastąpi istniejące pliki zawartością (ale nie trybami) z archiwum. Wokół mogą znajdować się niezgodne tary, ale wątpię, aby którykolwiek z nich zastąpiłby niepowiązane pliki, takie jak dir/file1.
Gilles „SO- przestań być zły”
0

Najłatwiejszym sposobem jest utworzenie nowego, pustego katalogu, skopiowanie do niego dysku CD i wyodrębnienie tam plików. Należy jednak uważać, aby wyodrębnione pliki były względne (zaczynają się od ./), a nie absolutne (zaczynają się od /). Przeciągnij spis treści przez mniej, aby zobaczyć, co się dzieje, jeśli nie wiesz (tar -tvf nazwa_pliku tar | mniej)

Możesz dowiedzieć się, czy twoja wersja tar zastępuje domyślnie, czy nie, patrząc na stronę man. Tar nie usunie plików podczas rozpakowywania, co jest kolejnym powodem, dla którego ludzie zwykle zaczynają od nowego, pustego katalogu przed wypakowaniem.

hotei
źródło