buka paket 'tar' tetapi ubah nama direktori untuk diekstraksi


26
tar -tf filename.tar
folder1/file
folder1/name
[...]

Saya ingin mengekstrak file dan nama , folder2 . Apakah ini dapat dilakukan sebagai one-liner?

Jawaban:


35

Gunakan -Cdan --strip-components(Lihat man tar).

Contoh:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz - -C FOLDER --strip-components=1

# for local tar file
tar -xzf FILENAME -C FOLDER --strip-components=1

Penjelasan:

The -Cbendera mengasumsikan direktori sudah di tempat sehingga isi dari file tar dapat diperluas ke dalamnya. karenanya mkdir FOLDER.

The --strip-componentsflag digunakan ketika sebuah file tar secara alami akan memperluas dirinya menjadi sebuah folder, biarkan katakanlah, seperti github mana contoh untuk repo-name-masterfolder. Tentu saja Anda tidak memerlukan folder level pertama yang dibuat di sini, jadi --strip-componentssetel 1akan secara otomatis menghapus folder pertama itu untuk Anda. Semakin besar angkanya, semakin banyak folder bersarang yang dihapus.


Saya baca man tar. Tidak menemukan --strip-components. bagus
Felipe Alvarez

1
tar-1.14 menggunakan --strip-path, tar-1.14.90 + menggunakan --strip-components. Mungkin ada masalah di sini?
Mikhail Moskalev

Saya akan membenarkan ini jika memberikan contoh dan bukan hanya sakelar, seperti yang dinyatakan dalam manual online , 3 gaya argumen menimbulkan kebingungan.
Iain

Lupa -f pada tar -xz, pikirku. Gagal bagiku. Saya pikir saya telah menggunakan itu tanpa alasan selama ini ...
John Carrell

17

Anda juga dapat menggunakan --transformopsi ini untuk sedikit lebih fleksibel. Ia menerima operasi penggantian pengganti apa pun.

Sebagai contoh, ini adalah bagaimana saya mengekstrak tarbal Linux ke direktori baru sehingga saya bisa menerapkan tambalan:

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
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.