Tar -xvf supprime-t-il les fichiers existants du répertoire?

10

J'ai une archive tar et je veux l'utiliser tar -xvf.
Dans cette archive tar, j'ai une arborescence de répertoires contenant quelques fichiers. Sur mon système Solaris 10, cette arborescence de répertoires existe déjà et contient plusieurs fichiers.
Si je décompresse l'archive, toute l'arborescence du répertoire est-elle écrasée ou seuls les fichiers contenus dans l'archive sont-ils écrasés?
Les fichiers qui n'ont pas de correspondant dans les archives seront-ils supprimés?

Felicia
la source
Vous pouvez toujours créer un test .tar et un répertoire de test et l'essayer ... une réponse que vous trouverez vous-même durera beaucoup plus longtemps dans votre esprit qu'une réponse donnée par quiconque ici.
Jarvin
La réponse est non. Si vous réfléchissez suffisamment, vous vous rendrez compte que cela n'a aucun sens qu'un programme pour extraire des fichiers d'une archive supprime des fichiers complètement indépendants.
Fosco

Réponses:

6

Les fichiers en double qui existent déjà peuvent ou non être décompressés et écrasés selon votre système. Cependant, il le fait généralement par défaut. Les fichiers qui sont dans l'archive mais pas sur votre système seront simplement ajoutés aux répertoires nouveaux ou existants sur votre système.

Dir /test

/1/a
c

Archiver test.tar

/1/b
d

sera probablement fusionné pour:

/1/a
/1/b
c
d

L'ajout de l' -kindicateur à la commande tar garantira qu'aucun des fichiers de votre répertoire cible ne sera écrasé:

tar -xvkf test.tar
BloodPhilia
la source
@BP: L'écrasement peut dépendre du shell car csh (toujours le shell par défaut sur Sun?) Avait une variable de shell "noclobber" qui, lorsqu'elle est définie, empêche un comportement d'écrasement accidentel.
hotei
Merci BloodPhilia et hotei. J'ai fait un test sur mon système et tar -xvf écrase les fichiers qui existent déjà et ajoute ceux qui n'existent pas. Ce que je voudrais savoir, c'est s'il existe une possibilité qu'un répertoire entier soit écrasé et perde ainsi les fichiers qui étaient sur mon système dans ce répertoire mais qui n'étaient pas dans l'archive? Par exemple: j'ai dans dir.tar dir / file2. Sur mon système, j'ai dir / file1, dir / file2 et dir / file3. Est-il possible que si j'exécute tar -xvf dir.tar, le répertoire entier sera écrasé et ne contiendra plus file1 et file3?
Felicia
@hotei: noclobber(qui existe également dans les shells POSIX btw) affecte uniquement les fichiers redirigés vers avec >foodans le shell. Il n'a aucun effet sur le goudron.
Gilles 'SO- arrête d'être méchant'
@hotei noclobber vous empêche d'écraser des fichiers par redirection dans le shell. echo foo > bar.txtN'écrasera donc pas bar.txt s'il existe. Cela n'a aucun effet sur ce qu'un programme, tel que tar, écrasera.
KeithB
1
@ Felicia: Selon Single Unix, tar n'effacera pas les fichiers qui n'étaient pas dans l'archive. Il écrasera les fichiers existants avec le contenu (mais pas les modes) de l'archive. Il peut y avoir des goudrons non conformes, mais je doute qu'aucun d'entre eux n'écrase des fichiers non liés tels que dir/file1.
Gilles 'SO- arrête d'être méchant'
0

Le moyen le plus simple consiste à créer un nouveau répertoire vide, à y accéder et à y extraire les fichiers. Vous devez cependant faire attention à ce que les fichiers extraits soient relatifs (commencer par ./) et non absolus (commencer par /). Dirigez la table des matières à travers less pour voir quel est le cas si vous ne le savez pas (tar -tvf tar_filename | less)

Vous pouvez savoir si votre version tar écrase par défaut ou non en consultant la page de manuel. Tar ne supprimera pas les fichiers pendant l'extraction, ce qui est une autre raison pour laquelle les gens partent généralement d'un nouveau répertoire vide avant de faire l'extraction.

hotei
la source