GNU/Linux >> Belajar Linux >  >> Linux

Shell 'tar:tidak ditemukan dalam kesalahan arsip' saat menggunakan ekspresi reguler

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.


Linux
  1. [Memperbaiki] kesalahan:snap "paket" tidak ditemukan

  2. Perbaiki kesalahan Class ZipArchive tidak ditemukan [PHP 7]

  3. [Linux] :Cara mengecualikan direktori saat menggunakan perintah shell "tar"

  1. perintah yum-config-manager tidak ditemukan [Perbaiki]

  2. c_rehash :Perintah tidak ditemukan kesalahan – Solusi

  3. Kapan Seseorang Mendapatkan Pesan Kesalahan "pekerjaan:Tidak Ditemukan"?

  1. Array di Bash Tidak Ditemukan

  2. FATAL:Kesalahan modul tidak ditemukan menggunakan modprobe

  3. Modul tidak ditemukan saat saya melakukan modprobe