Saya memiliki file zip seperti myArchive123.tar.gz
. Di dalamnya berisi folder sepertihelloWorld
Jika saya mengekstraknya: tar -xf myArchive123.tar.gz
Saya mendapatkan helloWorld
folder:
ls
myArchive123.tar.gz
helloWorld
Saya ingin output menjadi nama yang sama dengan nama file dikurangi ekstensi .tar.gz. Yaitu:
tar <magic paramaters> myArchive123.tar.gz
ls
myArchive123.tar.gz
myArchive123
cd myArchive123
ls
helloWorld
Bisakah ini dilakukan?
- Saya tidak pernah tahu apa yang ada di dalam arsip. Bisa jadi folder, bisa banyak file.
- Saya akan baik-baik saja dengan menggunakan alat lain jika tar tidak bisa melakukannya.
- Saya akan baik-baik saja dengan bentuk yang lebih panjang yang dapat diubah menjadi skrip
EDIT
Sementara itu saya meretas sendiri skrip yang tampaknya menyelesaikan pekerjaan. (lihat jawaban saya di bawah). Jika dapat ditingkatkan, jangan ragu untuk mengirim komentar / jawaban tambahan. Hal utama adalah bahwa itu harus dikemas menjadi satu-liner seperti:
extract <file>
Jawaban:
Dengan
gnu tar
, Anda dapat menggunakan--xform
(atau--transform
) untuk menambahkan/prefix/
ke setiap nama file:catatan ada yang tidak terkemuka
/
diprefix/
dansed
ekspresi berakhir denganS
mengecualikan target symbolic link dari transformasi nama file.Untuk mengujinya (dry-run):
Untuk membantu Anda memulai, berikut ini skrip yang sangat sederhana yang dapat Anda panggil sebagai
extract <file>
:sumber
Ya, setidaknya Anda bisa melakukannya dalam beberapa langkah. Jika Anda melakukannya
itu akan menyelesaikan tugas, meskipun mungkin ada jawaban yang lebih kompak di luar sana.
sumber
Edit
Jawaban yang diterima lebih pendek daripada yang di bawah ini. (lakukan hal yang sama, tetapi lebih pendek biasanya lebih baik).
Saya akhirnya meretas naskah untuk tugas yang ada. ini bekerja dengan .tar .tar.gz dan .gz
Pemakaian:
Catatan, solusi ini mampu membuat titik dalam nama file. Misalnya Eclipse-4.5M-SDK.tar.gz.
Saya menyimpan script di repo git saya. Untuk versi terbaru, lihat: https://github.com/LeoUfimtsev/ldts/blob/master/pathscripts/leo-tar-here
sumber
Satu lagi solusi yang mungkin adalah menggunakan
--transform
opsi:Dengan file Anda:
sumber
--strip-components=0
cukup menghapus nama direktori pertama dari path dan dengan-C
opsi menyimpan file yang sudah diarsipkan ke direktori baru.