Buat arsip tar dari direktori saat ini tanpa periode sebelumnya

10

Ketika saya melakukan hal berikut:

tar czvf ../myarchive.tar.gz ./

Saya mendapatkan satu folder root (mengganggu) di arsip tar saya:

menjengkelkan

Bagaimana cara menghapus periode mengerikan ini saat membuat arsip?

Naftuli Kay
sumber
Jawaban Stack Overflow ini mungkin membantu Anda.
n.st
3
Atau gunakan --transform/ --xform, seperti yang disarankan oleh Magnus :tar -cf /path/to/output.tar -C /path/to/input-directory . --xform='s!^\./!!'
n.st

Jawaban:

6

Kamu tidak.

name=${PWD##*/}
cd ..
tar czf "$name.tar.gz" "$name"

(Catatan: ini tidak berfungsi jika shell Anda memiliki pelacakan tautan simbolik direktori aktif dan direktori saat ini diakses melalui tautan simbolik.)

Ya, ini bukan yang Anda minta, tapi ini yang harus Anda lakukan. Arsip yang memperluas banyak file di direktori saat ini menjengkelkan: itu membuat beban membuat direktori target untuk file pada setiap orang yang membongkar arsip, dan jika mereka secara tidak sengaja membukanya di direktori yang tidak kosong, sulit untuk membersihkan. Sebagian besar waktu, arsip harus membuat direktori tingkat atas tunggal yang namanya adalah nama dasar arsip.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Dimengerti Jika saya ingat benar, itu hanya benar-benar menjengkelkan harus melakukan langkah ekstra untuk untar sebuah arsip ke dalam direktori tertentu (misalnya tar xzvf archive.tar.gz && mv archive/* /outputvs unzip archive.zip -d /output)
Naftuli Kay
9

Titik muncul karena tarmenciptakan struktur jalur seperti yang Anda berikan dalam argumen. Jadi seperti yang Anda berikan . sebagai sumber, arsip juga dibuat dalam struktur yang sama.

Anda dapat mencoba ini dan periksa:

tar -czvf ../myarchive.tar.gz *

Memperbarui jawaban dengan bantuan dari komentar oleh n.st

tar --xform s:'./':: -czvf ../myarchive.tar.gz ./
pemula
sumber
1
The *gumpal tidak akan cocok file yang tersembunyi.
n.st
: D eh..hanya pemula..tidak menyadari.
beginer
Anda bisa menggunakan bash glob lagi untuk memasukkan file tersembunyi - lihat di sini .
n.st
0

lebih baik tambahkan ^ sebelum sebelumnya.

tar --xform s:'^./':: -czvf ../myarchive.tar.gz ./

ATAU, semua "/" dalam pathname lengkap di dalam arsip akan dihapus kecuali "/" adalah akhir dari pathname lengkap.

zhoux
sumber
1
Sarankan edit untuk jawaban itu alih-alih memposting jawaban terpisah: unix.stackexchange.com/posts/144094/edit
muru