Apakah tar -xvf menghapus file yang ada dari direktori?

10

Saya memiliki arsip tar dan saya ingin menggunakannya tar -xvf.
Dalam arsip tar ini saya memiliki pohon direktori yang berisi beberapa file. Pada sistem solaris 10 saya, pohon direktori ini sudah ada dan memiliki beberapa file di dalamnya.
Jika saya membongkar arsip adalah seluruh pohon direktori ditimpa atau hanya file yang terkandung dalam arsip ditimpa?
Apakah file yang tidak memiliki koresponden di arsipnya akan dihapus?

Felicia
sumber
Anda selalu dapat membuat test .tar dan direktori pengujian dan mencobanya ... jawaban yang Anda buat sendiri akan bertahan lebih lama di benak Anda daripada jawaban yang diberikan kepada Anda oleh siapa pun di sini.
Jarvin
Jawabannya adalah tidak. Jika Anda berpikir cukup keras, Anda akan menyadari bahwa tidak masuk akal bahwa program untuk mengekstrak file dari arsip akan menghapus file yang sama sekali tidak terkait.
Fosco

Jawaban:

6

File duplikat yang sudah ada mungkin dibuka atau tidak bisa dibuka dan ditimpa tergantung pada sistem Anda. Namun, biasanya tidak secara default. File yang ada di arsip tetapi tidak di sistem Anda hanya akan ditambahkan ke direktori baru atau yang ada di sistem Anda.

Dir /test

/1/a
c

Arsipkan test.tar

/1/b
d

mungkin akan digabungkan ke:

/1/a
/1/b
c
d

Menambahkan -kbendera ke perintah tar akan memastikan tidak ada file di direktori target Anda yang akan ditimpa:

tar -xvkf test.tar
BloodPhilia
sumber
@ BP: Timpa mungkin tergantung pada shell sebagai csh (masih shell default pada Sun?) Memiliki variabel shell "noclobber" yang ketika diatur mencegah perilaku menimpa yang tidak disengaja.
hotei
Terima kasih BloodPhilia dan hotei. Saya telah melakukan tes pada sistem saya dan tar -xvf menimpa file yang sudah ada dan menambahkan yang tidak ada. Yang ingin saya ketahui adalah apakah ada kemungkinan seluruh direktori harus ditimpa dan dengan demikian kehilangan file yang ada di sistem saya di direktori itu tetapi tidak ada dalam arsip? Sebagai contoh: Saya punya di dir.tar dir / file2. Pada sistem saya, saya memiliki dir / file1, dir / file2 dan dir / file3. Apakah mungkin jika saya menjalankan tar -xvf dir.tar, seluruh direktori akan ditimpa dan tidak lagi berisi file1 dan file3?
Felicia
@hotei: noclobber(yang juga ada di shell POSIX btw) hanya memengaruhi file yang dialihkan ke >foodalam shell. Itu tidak berpengaruh pada tar.
Gilles 'SANGAT berhenti menjadi jahat'
@hotei noclobber mencegah Anda menimpa file melalui pengalihan di shell. Jadi echo foo > bar.txttidak akan menimpa bar.txt jika ada. Ini tidak berpengaruh pada apa yang akan ditimpa oleh suatu program, seperti tar,.
KeithB
1
@Felicia: Menurut Single Unix, tar tidak akan menghapus file yang tidak ada dalam arsip. Ini akan menimpa file yang ada dengan konten (tetapi bukan mode) dari arsip. Mungkin ada non-compliant tars, tetapi saya ragu salah satu dari mereka akan menimpa file yang tidak terkait seperti dir/file1.
Gilles 'SANGAT berhenti menjadi jahat'
0

Cara termudah adalah dengan membuat direktori baru, kosong, cd ke sana, dan mengekstrak file di sana. Anda perlu berhati-hati bahwa file yang diekstraksi adalah relatif (mulai dengan ./) dan tidak absolut (mulai dengan /). Pipa daftar isi melalui kurang untuk melihat yang terjadi jika Anda tidak tahu (tar -tvf tar_filename | less)

Anda dapat mengetahui apakah versi tar Anda menimpa secara default atau tidak dengan melihat halaman manual. Tar tidak akan menghapus file selama ekstraksi, yang merupakan alasan lain mengapa orang biasanya mulai dari direktori baru yang kosong sebelum melakukan ekstrak.

hotei
sumber