Saat Anda menulis:
tar -xf *.gz
tar
perintah melihat (misalnya):
tar -xf abc.tar.gz def.tar.gz ghi.tar.gz
Ini ditafsirkan sebagai permintaan untuk mengekstrak def.tar.gz
dan ghi.tar.gz
dari arsip abc.tar.gz
. Karena file tidak ada di sana, Anda mendapatkan pesan peringatan.
Dengan kata lain, tar
beroperasi pada satu tar
file (mungkin dikompresi) sekaligus (dalam satu doa). Itu tidak beroperasi pada banyak file tar.
Perhatikan bahwa jika abc.tar.gz
berisi file pqr/xyz/important.c
, Anda dapat mengekstrak satu file saja dengan menentukan:
tar -xf abc.tar.gz pqr/xyz/important.c
Notasi yang Anda gunakan hanyalah varian dari notasi ini.
(Dan ya, mungkin ada alasan untuk tar
sebuah tar
mengajukan. Misalnya, Gmail tidak mengizinkan Anda mengirimkan file tar atau file tar yang di-gzip yang berisi file yang dapat dieksekusi. Namun, jika Anda menyematkan file tar yang di-gzip di dalam file tar yang tidak dikompresi, file tersebut tidak akan mencari di dalam file dalam untuk menemukan file yang dapat dieksekusi. Saya menggunakan ini ketika saya perlu mengirim file tar dengan configure
yang dapat dieksekusi skrip.)
alasan utamanya adalah tar
mengambil argumen nama file tunggal. Saat Anda menelepon tar *.tgz
bash memperluas *
ke semua nama file dengan format tgz dan menjadi tar file1 file2 file3
yang tidak diterima oleh tar
. Jadi baik Anda menggunakan for loop seperti for i in *.tgz; do tar -zxvf $i ;done
atau gunakan beberapa perintah lain yang mengeksekusi tar
sebagai efek samping seperti yang ditunjukkan pada komentar, adalah ls
atau find . -maxdepth 1 -name \*tgz -exec tar -zxvf {} \;
(ls
keluaran selalu berisiko)
Saat Anda menulis
tar -xzf *.gz
shell Anda mengembangkannya menjadi string:
tar -xzf 1.gz 2.gz 3.gz
(dengan asumsi 1.gz, 2.gz dan 3.gz ada di direktori Anda saat ini).
tar
berpikir bahwa Anda ingin mengekstrak 2.gz
dan 3.gz
dari 1.gz
; itu tidak dapat menemukan file-file ini di arsip dan itu menyebabkan pesan kesalahan.
Anda perlu menggunakan loop for
dari perintah xargs
untuk mengekstrak file Anda.
ls *.gz |xargs -n1 tar -xzf
Artinya:jalankan saya tar -xzf
untuk setiap gz
-file di direktori saat ini.