Comment grep pour un modèle dans les fichiers de l'archive tar sans remplissage de l'espace disque
J'ai une archive tar qui est très grand ~ 5 GO.
Je veux grep pour un modèle sur tous les fichiers (et aussi imprimer le nom du fichier qui a le motif ) dans les archives, mais ne veulent pas remplir mon espace disque par l'extraction de l'archive.
De toute façon je peux le faire?
J'ai essayé, mais cela ne me donne pas les noms de fichiers qui contiennent le motif, juste les lignes correspondants:
tar -O -xf test.tar.gz | grep 'this'
tar -xf test.tar.gz --to-command='grep awesome'
Aussi où est cette caractéristique de goudron documenté? tar xf test.tar $FICHIER
- stackoverflow.com/questions/2407111/...
- Où est cette caractéristique de goudron documenté? tar xf test.tar $FICHIER
- Arrivés à la section exemples (dernier exemple): unixhelp.ed.ac.uk/CGI/homme-cgi?tar
- Généralement, la page de man pour
tar
n'explique pas encore ajout de fichiers correctement. .... plus précisément, la page de manuel qui vient avec mon linux dist il a[pathname ...]
et pas de furthure explication, mais si append fonctionne (aussi pas documenté), que vous pouvez essayer d'extraire trop..... vous avez à lire Unix Haters Manuel - Grâce Op! Cela est très utile!
Vous devez vous connecter pour publier un commentaire.
Voici mon point de vue sur ce:
Éclaté pour plus d'explications:
while read filename; do
-- c'est une boucle...tar -xOf file.tar "$filename"
-- présent des extraits de chaque fichier...| grep 'pattern'
-- c'est ici que vous mettez votre patron...| sed "s|^|$filename:|";
- ajouter le nom de fichier, de sorte que cela ressemble à grep. Le sel au goût.done < <(tar -tf file.tar | grep -v '/$')
-- fin de la boucle, obtenir la liste des fichiers à la fead à votrewhile read
.Une condition: ce des pauses si vous en avez OU bars (
|
) dans vos noms de fichiers.Hmm. En fait, cela fait une belle petite fête de la fonction, que vous pouvez ajouter à votre
.bashrc
fichier:Semble que personne n'a posté cette solution simple qui processus de l'archive qu'une seule fois:
Ici
tar
transmet le nom de chaque fichier dans une variable (voir les docs) et il est utilisé pargrep
à imprimer à chaque match. Aussitrue
est ajouté afin quetar
ne vous plaignez pas de défaut pour extraire les fichiers qui ne correspondent pas.; true
ne fonctionne pas pour moi; ceux-ci sont passés comme arguments àgrep
, qui se plaint;
ettrue
n'étant pas des fichiers ou des répertoires.zsh
, mais il semble de plus en plus comme le genre de chose qui change entre les versions detar
que entre les coquilles. Les deuxzsh
etbash
interpréter la seule citégrep
de commande de la même façon si il ont été saisis directement.Voici un bash fonction qui peut travailler pour vous. Ajoutez les lignes suivantes à votre
~/.bashrc
Utilisation:
Il est incroyablement hacky, mais vous pourriez abus de goudron de
-v
option pour traiter et supprimer chaque fichier tel qu'il est extrait..tar.gz
fichier une fois.Essayer:
La t option permettra de tester le fichier tar sans extraire les fichiers. Le v est verbeux et la f il imprime les noms de fichiers. Cela devrait vous sauver considérable de l'espace disque dur.
peut aider
http://www.commandlinefu.com/commands/view/9261/grep-compressed-log-files-without-extracting