Saya bertanya-tanya apakah (dan, tentu saja, bagaimana) adalah mungkin untuk mengatakan tar
untuk mengekstrak beberapa file dalam sekali jalan.
Saya adalah pengguna Unix yang berpengalaman selama beberapa tahun dan tentu saja saya tahu bahwa Anda dapat menggunakan for
atau find
atau hal-hal seperti itu untuk memanggil tar
satu kali untuk setiap arsip yang ingin Anda ekstrak, tetapi saya tidak dapat menghasilkan baris perintah yang berfungsi yang menyebabkan saya tar
untuk mengekstrak dua file .tar.gz sekaligus. (Dan tidak, tidak ada yang salah dengan itu for
, aku hanya bertanya apakah mungkin untuk melakukannya tanpanya.)
Saya mengajukan pertanyaan ini karena penasaran, mungkin
- ada garpu aneh di
tar
suatu tempat yang mendukung ini - seseorang tahu cara menggunakan
-M
parameter yangtar
disarankan kepada saya ketika saya mencobatar -zxv -f a.tgz -f b.tgz
- kita semua buta dan itu sangat mudah dilakukan - tetapi saya tidak dapat menemukan petunjuk apa pun di web yang tidak memanfaatkan
for
ataufind
atauxargs
sejenisnya.
Tolong jangan balas dengan tar -zxvf *.tar.gz
(karena itu tidak bekerja) dan hanya membalas dengan "tidak bekerja" jika Anda benar-benar yakin tentang hal itu (dan mungkin juga memiliki penjelasan yang bagus mengapa ).
Sunting: Saya diarahkan ke jawaban untuk pertanyaan ini di Stack Overflow yang mengatakan dengan sangat terperinci bahwa itu tidak mungkin tanpa melanggar tar
sintaksis saat ini , tetapi saya tidak berpikir itu benar. Menggunakan tar -zxv -f a.tgz -f b.tgz
atau tidak tar -zxv --all-args-are-archives *.tar.gz
akan merusak sintaks yang ada, imho.
-M
parameter.Jawaban:
Ini mungkin, sintaksnya cukup mudah:
Opsi -i mengabaikan EOF di akhir arsip tar, dari halaman manual:
sumber
cat *.tar.bz2 | tar -ixjv
. Terima kasih!untuk * .tar.gz
untuk * .tar.bz2
untuk * .tar.xz
sumber
$file
jika file Anda memiliki nama dengan spasi.Anda perlu menggunakan loop. Itu tidak akan melanggar
tar
sintaks baris perintah untuk membolehkan beberapa-f
opsi, tetapi akan membutuhkan penambahan kode untuk memproses beberapa arsip secara berurutan, dengan semua jenis kondisi tepi (Apa yang terjadi jika arsip di tengah salah bentuk? Dapatkah arsip menggunakan berbeda mekanisme kompresi? Dapatkah Anda memiliki banyak-C
opsi (opsi tar GNU untuk mengekstrak ke direktori tertentu), juga? Bagaimana dengan -K (opsi tar GNU untuk memulai dengan nama anggota tertentu)? ...).Satu kemungkinan menghindari
for
loop adalah menginstal dan mengaktifkan AVFS , sistem file FUSE yang menyediakan akses transparan ke arsip. Setiap arsip/path/to/archive
berfungsi sebagai direktori~/.avfs/path/to/archive#
. Jika Anda ingin mencocokkan arsip dengan wildcard, ada rintangan menambahkannya#
ke pertandingan wildcard; itu bisa dilakukan di zsh.sumber
find . -name "*.tar.gz" -exec tar xzf {} \;
sumber