Bagaimana cara mengekstrak direktori tertentu dari tarball? dan strip direktori terkemuka?


12

Saya ingin mengekstrak direktori tertentu dari tarball wordpress. khusus wp-includesuntuk .. Tampaknya struktur direktori di dalam tarball adalah wordpress/wp-includestetapi saya hanya perlu ./wp-includessetelah itu diekstraksi, tidak ada direktori wordpress terkemuka. Bagaimana saya melakukan ini?

Jawaban:


13

Untuk mengekstrak direktori tertentu (dan isinya, secara rekursif), cukup berikan sebagai argumen tambahan pada baris perintah. Dengan GNU tar , Anda dapat menghapus direktori utama dengan --strip-componentsopsi (dan lebih umum mengubah nama file dengan --transform). Pada sistem non-Linux, Anda dapat menggunakan pax (itu dalam POSIX, tetapi beberapa distribusi Linux menghilangkannya dari instalasi default mereka) dan -sopsinya.

tar xf foo.tar --strip-components=1 wordpress/wp-includes  #GNU tar
pax -r <foo.tar -pp -s '!^wordpress/!!' wordpress/wp-includes

Anda dapat menggabungkan daftar penyertaan dengan aturan penulisan ulang dengan menambahkan aturan untuk menulis ulang semuanya menjadi nama kosong (yang berarti "jangan mengekstrak"; aturan hanya berlaku jika aturan sebelumnya tidak cocok).

pax -r <foo.tar -pp -s '!^wordpress/\(wp-includes/\)!\1!' -s !.*!!

5

Dengan asumsi Anda memiliki GNU tar, Anda dapat menggunakan --strip-components:

$ tar xaf tarball.tar.gz --strip=1 wordpress/wp-includes

Saya percaya versi tar BSD saat ini juga mendukung --strip-components. Dalam kasus terburuk, Anda bisa melakukan:

$ tar xzf tarball.tar.gz wordpress/wp-includes
$ mv wordpress/wp-includes .
$ rmdir wordpress

Saya akhirnya melakukan yang terakhir hanya karena terburu-buru, tetapi baik untuk mengetahui yang sebelumnya ada.
xenoterracide

Apakah mungkin untuk menggunakan perintah yang tidak mengharuskan penamaan komponen yang dilucuti secara eksplisit (misalnya wordpress)? Saya membutuhkan ini ketika saya mengekstraksi GitHub membuat tarballs yang berisi revisi git pada komponen yang dilucuti yang tidak saya ketahui sebelumnya.
tjanez
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.