Proyek terhormat merilis arsip tar yang mengandung satu direktori, misalnya zyrgus-3.18.tar.gz
berisi zyrgus-3.18
folder yang pada gilirannya berisi src
, build
, dist
, dll
Tetapi beberapa proyek punk menempatkan semuanya pada root: '- (Ini menghasilkan kekacauan total ketika membatalkan pengarsipan. Membuat folder secara manual setiap kali terasa menyebalkan, dan hampir tidak perlu sepanjang waktu.
- Apakah ada cara super cepat untuk mengetahui apakah file .tar atau .tar.gz berisi lebih dari satu direktori pada akarnya? Bahkan untuk arsip besar.
- Atau bahkan lebih baik, adakah alat yang dalam kasus seperti itu akan membuat direktori (nama arsip tanpa ekstensi) dan meletakkan semuanya di dalamnya?
But some punk projects put everything at the root :'-(
Dan beberapa proyek punk memasukkan semuanya ke dalam folder yang sama sekali tidak perlu, mengingat bahwa mereka sudah meletakkan semuanya di dalam arsip yang terlampir, sehingga ketika Anda mengunduh dan meng-unzip ke foldernya sendiri seperti yang dilakukan oleh pengguna pintar, Anda berakhir dengan semua konten mengubur lapisan lain ke bawah. ;-)Jawaban:
patool menangani berbagai jenis arsip dan membuat subdirektori seandainya arsip tersebut berisi banyak file untuk mencegah kekacauan direktori kerja dengan file yang diekstrak.
Ekstrak arsip
Untuk mendapatkan daftar format yang didukung, gunakan
patool formats
.sumber
alien
mengubahnya menjadi deb untuk Ubuntu.patool
harus dalam repo untuk Debian dan Ubuntu jika Anda menjalankan versi saat ini.Anda bisa melakukan sesuatu seperti
untuk melihat entri tingkat atas apa yang dimiliki tar; pipa untuk
wc -l
memeriksa apakah ada lebih dari satu. Perhatikan bahwa ada beberapa kasus di mana ini akan gagal, misalnya jika tar berisi path file dari formsomedir/whatever
dan juga./somedir/whatever
(atau sesuatu yang lebih gila); ini seharusnya tidak biasa.Ini akan membaca seluruh file tar sebelum mengeluarkan apa pun, karena itu
sort
, meskipun itu harus lebih cepat daripada benar-benar mengekstraksi karena itu hanya satu baca berurutan dan dapat melewati file besar.Jika Anda melakukan ini secara interaktif dan file mungkin besar, Anda dapat mengubah
sort -u
keuniq
dan Control+ Cjika mencetak lebih dari satu hal.sumber
sort | uniq
dapat disingkat menjadisort -u
.uniq -c
Anda dapat melakukan:
... untuk membuat daftar isi suatu
tar
file.jika Anda ingin tahu berapa banyak level kedalamannya, Anda dapat melakukannya:
Anda dapat secara eksplisit melarang ledakan ekstraksi dengan:
sumber
Ini harus melakukan apa yang Anda inginkan. Saya yakin seseorang dapat memperbaikinya.Dalam contoh ini saya menganggap arsip tar terkompresi gzip karena ini adalah yang paling umum.
Anda ingin arsip di mana tidak ada saudara kandung node di pohon direktori level root.
Setiap entri dalam daftar konten tar harus dimulai dengan pola yang sama. Pola ini adalah jalur direktori dasar yang harus dibagi oleh semua entri dalam arsip. Jika ada dua entri yang tidak dimulai dengan pola yang sama maka mereka adalah saudara kandung.
Baris pertama dalam daftar konten tar akan memberi Anda pola minimal yang perlu Anda periksa. Ini BASEPATH.
Kemudian untuk menguji untuk tarball peledak Anda perlu memeriksa apakah setiap baris dari daftar isi tar tidak dimulai dengan BasePath.
Ubah ini menjadi fungsi shell:
Dari sini Anda dapat menulis fungsi ekstraksi arsip tar aman.
sumber
aunpack archive.tar
adalah apa yang saya gunakan.Bagian dari paket atool tua yang baik . Manpage: https://linux.die.net/man/1/atool
sumber