web-dev-qa-db-fra.com

Comment supprimer les messages d'erreur tar lors du piping

Par exemple: J'extrais un fichier tar.bz2 avec tar -xvf au lieu de tar -xjvf:

 tar -xvf file.tar.bz2
 tar: invalid tar magic

et si redirection stderr

 tar -xvf file.tar.bz2 2>/dev/null

ça marche.

Maintenant si j'utilise un tuyau

 tar -xvf file.tar.bz2 | grep "something" 2>/dev/null 
 tar: invalid tar magic

Ici, si la première commande échoue, je ne peux pas supprimer l'erreur.

Y a-t-il un moyen de supprimer de cette façon

6
Ramana Reddy

Voici quelques alternatives qui impliquent de rediriger STDERR de tar et grep:

  • Utiliser bash grouper les commandes {}:

    { tar -xvf file.tar.bz2 | grep "something" ;} 2>/dev/null
    
  • Utiliser un sous-shell ():

    ( tar -xvf file.tar.bz2 | grep "something" ) 2>/dev/null
    

Notez que si vous voulez rediriger STDERR d'un seul processus, mieux vaut utiliser réponse d'Oli .

Sur une note différente, si vous voulez grep quelque chose à la fois sur le STDOUT et le STDERR de tar utilisez:

tar -xvf file.tar.bz2 |& grep "something"

Cela entraînera également l'épuisement du STDERR de tar.

Ceci est en réalité un raccourci pour:

tar -xvf file.tar.bz2 2>&1 | grep "something"
7
heemayl

Le tube forme une clause séparée dans la commande pour que la redirection dans ...

tar -xvf file.tar.bz2 | grep "something" 2>/dev/null 

... redirige le STDERR de grep, pas tar.

Pour résoudre ce problème, il suffit de réorganiser les éléments pour que votre redirection s'effectue avec votre commande tar:

tar -xvf file.tar.bz2 2>/dev/null | grep "something"
6
Oli