Tar -xvf rimuove i file esistenti dalla directory?


10

Ho un archivio tar e voglio usarlo tar -xvf.
In questo archivio tar ho un albero di directory contenente un paio di file. Sul mio sistema Solaris 10 questa struttura di directory esiste già e contiene diversi file.
Se decomprimo l'archivio viene sovrascritto l'intero albero di directory o vengono sovrascritti solo i file contenuti nell'archivio?
I file che non hanno un corrispondente nell'archivio verranno eliminati?


Puoi sempre creare un test .tar e una directory di test e provarlo ... una risposta che ti viene in mente durerà molto più a lungo nella tua mente di una risposta che ti è stata data da chiunque qui.
Jarvin,

La risposta è no. Se ci pensi abbastanza, ti renderai conto che non ha alcun senso che un programma per estrarre file da un archivio eliminerebbe file completamente non correlati.
Fosco,

Risposte:


6

I file duplicati già esistenti possono essere o meno decompressi e sovrascritti a seconda del sistema. Tuttavia, di solito lo fa per impostazione predefinita. I file che si trovano nell'archivio ma non sul tuo sistema verranno semplicemente aggiunti alle directory nuove o esistenti sul tuo sistema.

dir /test

/1/a
c

Archivio test.tar

/1/b
d

sarà probabilmente unito a:

/1/a
/1/b
c
d

L'aggiunta del -kflag al comando tar farà sì che nessuno dei file nella directory di destinazione venga sovrascritto:

tar -xvkf test.tar

@BP: La sovrascrittura può dipendere dalla shell poiché csh (ancora shell di default su Sun?) Aveva una variabile di shell "noclobber" che quando impostata previene il comportamento accidentale di sovrascrittura.
hotei,

Grazie BloodPhilia e hotei. Ho effettuato un test sul mio sistema e tar -xvf sovrascrive i file già esistenti e aggiunge quelli che non esistono. Quello che vorrei sapere è se c'è la possibilità che un'intera directory debba essere sovrascritta e quindi perdere i file che erano sul mio sistema in quella directory ma non erano nell'archivio? Ad esempio: ho in dir.tar dir / file2. Sul mio sistema ho dir / file1, dir / file2 e dir / file3. È possibile che se eseguo tar -xvf dir.tar l'intera directory verrà sovrascritta e non conterrà più file1 e file3?
Felicia,

@hotei: noclobber(che esiste anche nelle shell POSIX tra l'altro) influisce solo sui file reindirizzati a con >foonella shell. Non ha alcun effetto sul catrame.
Gilles 'SO- smetti di essere malvagio' il

@hotei noclobber ti impedisce di sovrascrivere i file attraverso il reindirizzamento nella shell. Quindi echo foo > bar.txtnon sovrascriverà bar.txt se esiste. Non ha alcun effetto su ciò che un programma, come tar, sovrascriverà.
KeithB,

1
@Felicia: Secondo Single Unix, tar non cancellerà i file che non erano nell'archivio. Sovrascriverà i file esistenti con i contenuti (ma non le modalità) dall'archivio. Potrebbero esserci tars non conformi, ma dubito che qualcuno di loro sovrascriverebbe file non correlati come dir/file1.
Gilles 'SO- smetti di essere malvagio' il

0

Il modo più semplice è creare una nuova directory vuota, cd su di essa ed estrarre i file lì. Devi stare attento però che i file estratti siano relativi (iniziano con ./) e non assoluti (iniziano con /). Inoltra il sommario attraverso less per vedere qual è il caso se non lo sai (tar -tvf tar_filename | less)

Puoi scoprire se la tua versione tar sovrascrive di default o no guardando la pagina man. Tar non eliminerà i file durante l'estrazione, motivo per cui le persone di solito si avviano da una nuova directory vuota prima di eseguire l'estrazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.