trouver un fichier dans une archive tar.gz


12

Est-il possible d'utiliser la findcommande pour qu'elle recherche les fichiers dans une archive tar.gz en utilisant également des caractères génériques?

comme

find archive.tar.gz --name *foo*

Réponses:


17

Que diriez-vous simplement:

$ tar tf archive.tar.gz | grep foo

n'est-ce pas juste lister tous les fichiers?
pince

@clamp Oui, si vous voulez faire quelque chose pour chaque fichier, dirigez simplement cette sortie vers une autre commande.

Merci! désolé mais je suis un débutant sous unix. j'ai essayé: tar tf graphics.tar.gz | find . --name *space*mais ça ditunkown predicate --name
pince

Les findarguments @clamp ne prennent qu'un seul tiret, mais comme il s'agit d'une liste de fichiers sur stdin, vous souhaitez utiliser à la grepplace, comme l'exemple de code de hesse. Essayeztar tf graphics.tar.gz | grep 'space'
Kevin

1
grep *foo*n'est pas une expression régulière valide. gregne comprend pas les globes, il comprend les expressions régulières. Essayez grep fooplutôt.
Alexios

3

Montez l'archive en tant que répertoire. Vous pouvez le faire avec le système de fichiers AVFS , qui vous permet d'accéder à n'importe quelle archive en tant que répertoire dont le nom a une fin #.

mountavfs
cd ~/.avfs$PWD
find archive.tar.gz\# -name '*foo*'

ne fonctionne pas pour gzip
van abel

@vanabel Un fichier gzip ne contient pas d'autres fichiers. C'est juste un fichier, compressé. Il n'y a donc pas de «dedans» pour chercher.
Gilles 'SO- arrête d'être méchant'

2

Je pense que cela fonctionne sans pipe et grep.

comme ça: tar tvf archive.tar.gz "foo"

de cette façon, les globes fonctionneront également.

tar tvf archive.tar.gz "*.foo"

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.