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.