2017-10-20 7 views
2

Lors de l'utilisation de la commande unzip dans bash, beaucoup de sortie dans le terminal est créée. Certaines sorties peuvent être supprimées en utilisant l'option -q ou -qq ("= encore plus silencieux" - UNZIP MAN). Cependant, toujours à la fin du processus, je reçois toujours un message comme 10 archives were successfully processed (et avec une ligne vide avant).Comment éviter que les archives "décompressées" soient traitées avec succès. " sortie

Il semble que ce message est de la STDERR, parce que quand je sortie STDOUT dans un fichier comme

unzip -qq files2zip.zip 1> stdoutput.txt 

Il est encore au terminal émis et non le fichier. Lorsque je génère le fichier STDERR (c'est-à-dire, 2> stderror.txt) dans un fichier, il est exporté vers le fichier.

Dans mon script, je souhaite que les erreurs s'affichent à l'écran, mais je ne souhaite pas que ce message apparaisse. Donc, y at-il un moyen de supprimer ce message sans perdre la sortie des erreurs (je ne veux pas sortir le fichier stderr dans un fichier)?

+0

Quelle version de 'unzip' avez-vous? Ni * UnZip 6.00 par Debian * sur une distribution Ubuntu ni * UnZip 6.00 par Info-ZIP * sur Red Hat n'impriment ce message. –

+0

'man unzip' me dit que c'est v6.0. Je suis sur Ubuntu et je pense que je viens de l'installer en utilisant apt-get (si je me souviens bien). –

Répondre

1

Vous pouvez utiliser proc sous

unzip -qq files2zip.zip 2> >(grep -v "were successfully processed") 
+0

Merci, ça fait l'affaire en effet. J'ai essayé quelque chose de similaire, mais je n'ai pas réussi à corriger la tuyauterie. Alors, à quoi sert le second '>'? Et y a-t-il un moyen de se débarrasser également de la ligne vide au-dessus du message en utilisant grep? –

+0

@LuKas '2>' le descripteur de fichier STDOUT ouvert à ce qui suit et '>()' permet d'envoyer ce flux de données à un processus comme s'il s'agissait d'un fichier. Voir [ici] (https://www.gnu.org/software/bash/manual/html_node/Process-Substitution.html). – 123

0

Il n'y a pas de troisième sortie en plus de l'erreur standard et de la sortie standard. Donc, la meilleure chose que vous pouvez faire est de filtrer le message indésirable de stderr, en plus de la ligne précédente. Notez que cela suppose une sortie particulièrement structurée de unzip, qui pourrait facilement se casser. Quelque chose comme ceci:

unzip file.zip 2> >(head --lines=-2) 
+0

Mais je veux que les erreurs (réelles) soient affichées dans le terminal. –