GNU/Linux >> Linux Esercitazione >  >> Linux

Shell 'tar:errore non trovato nell'archivio' quando si utilizza l'espressione regolare

Quando scrivi:

tar -xf *.gz

il tar il comando vede (per esempio):

tar -xf abc.tar.gz def.tar.gz ghi.tar.gz

Questo viene interpretato come una richiesta per estrarre def.tar.gz e ghi.tar.gz dall'archivio abc.tar.gz . Dal momento che i file non sono presenti, viene visualizzato il messaggio di avviso.

In altre parole, tar opera su un singolo tar file (possibilmente compresso) alla volta (in una chiamata). Non funziona su più file tar.

Nota che se abc.tar.gz contiene un file pqr/xyz/important.c , puoi estrarre solo un file specificando:

tar -xf abc.tar.gz pqr/xyz/important.c

La notazione che hai usato è solo una variante di questa notazione.

(E sì, ci possono essere ragioni per tar un tar file. Ad esempio, Gmail non ti consente di spedire un file tar o un file tar compresso con gzip che contiene un file eseguibile. Tuttavia, se incorpori un file tar compresso con gzip all'interno di un file tar non compresso, non cerca all'interno del file interno per trovare il file eseguibile. Lo uso quando devo spedire un file tar con un eseguibile configure script.)


il motivo principale è tar accetta un singolo argomento di nome file. Quando chiami tar *.tgz bash estende il * a tutti i nomi di file con formante tgz e diventa tar file1 file2 file3 che non è accettato da tar . Quindi o usi un ciclo for come for i in *.tgz; do tar -zxvf $i ;done o usa qualche altro comando che esegue tar come effetto collaterale come mostrato nei commenti, è ls o find . -maxdepth 1 -name \*tgz -exec tar -zxvf {} \; (ls l'output è sempre rischioso)


Quando scrivi

 tar -xzf *.gz

la tua shell lo espande nella stringa:

 tar -xzf 1.gz 2.gz 3.gz

(supponendo che 1.gz, 2.gz e 3.gz siano nella tua directory corrente).

tar pensa che tu voglia estrarre 2.gz e 3.gz da 1.gz; non riesce a trovare questi file negli archivi e questo causa il messaggio di errore.

Devi usare il loop for del comando xargs per estrarre i tuoi file.

ls *.gz |xargs -n1 tar -xzf

Ciò significa:eseguimi tar -xzf per ogni gz -file nella directory corrente.


Linux
  1. Correzione dell'errore di classe ZipArchive non trovato [PHP 7]

  2. [Linux]:come escludere la directory quando si utilizza il comando shell "tar".

  3. Comando yum-config-manager non trovato [fissare]

  4. c_rehash :Errore comando non trovato – Soluzione

  5. Quando viene visualizzato il messaggio di errore "lavori:non trovati"?

Risoluzione dei problemi di errore "Bash:comando non trovato" in Linux

If...else...if Statement (comando non trovato errore)?

Modulo non trovato quando eseguo un modprobe

sshpass:comando non trovato errore

Visualizza corrispondenza trovata o non utilizzando awk

comando linux trovato ma non trovato quando si usa sudo