Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


admin_grundlagen:pipes_und_umleitungen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
Nächste Überarbeitung Beide Seiten, nächste Überarbeitung
admin_grundlagen:pipes_und_umleitungen [2009/01/13 12:42]
127.0.0.1 Externe Bearbeitung
admin_grundlagen:pipes_und_umleitungen [2020/12/07 07:27]
ingo_wichmann [Ausgabe eines Befehls mit zweitem Befehl weiterverarbeiten]
Zeile 1: Zeile 1:
-Ergebnisse in ''​dateien.txt''​+===== Vorbereitung des Beispiels ===== 
-  ​find / -mount -name "​*.au"​ > /tmp/dateien.txt+Testdaten ins Heimatverzeichnis kopieren
 +  ​cd 
 +  cp -a /usr/share/doc .
  
-Fehlermeldungen unterdrücken+===== Ausgabe eines Befehls in Datei umleiten ===== 
-  find / -mount -name "*.au" > /tmp/dateien.txt 2> /dev/null+jpg-Bilder in ''​doc''​ suchen und Ergebnis in ''​bilder.txt''​ speichern
 +  find doc/ -xdev -name "*.jpg" > /tmp/bilder.txt
  
-''​dateien.txt''​ mit ''​touch''​ weiterverarbeiten+Das Selbe, aber Fehlermeldungen unterdrücken
-  ​xargs touch < /tmp/dateien.txt+  ​find doc/ -xdev -name "​*.jpg"​ > /tmp/bilder.txt 2> /dev/null
  
-Beide Operationen zusammenfassen+===== Dateiinhalt mit Befehl weiterverarbeiten ===== 
-  find / -mount -name "*.au" 2> /dev/null | xargs touch+Berechtigung der in der Datei ''​bilder.txt''​ aufgeführten Dateien mit ''​chmod''​ ändern: 
 +  xargs chmod g+w < /​tmp/​bilder.txt 
 +''​xargs''​ liest die (durch ein Zeilenende ''​\n''​ getrennten) Dateinamen (ggf. mit Pfad) aus der Standardeingabe und hängt diese als Liste an das Kommando (hier ''​chmod g+w''​) an. 
 +===== Ausgabe eines Befehls mit zweitem Befehl weiterverarbeiten ===== 
 +jpg-Bilder in ''​doc''​ suchen und Berechtigung mit ''​chmod''​ ändern
 +  find doc/ -xdev -name "*.jpg" 2> /dev/null | xargs chmod g-w
  
-Das Selbe mit einer benannten Pipe+Verbesserte Version, die auch mit Leer- und Sonderzeichen in Dateinamen klar kommt
-  ​mkfifo pipe +  ​mv doc '​Eigene Dateien'​ 
-  xargs touch < pipe & +  ​find Eigene\ Dateien -xdev -name "​*.jpg"​ -print0 2> /dev/null | xargs -0 chmod g+w 
-  find / -mount ​-name "*.au" 2> /dev/null > pipe+  mv Eigene\ Dateien doc 
 + 
 +Alle JPEG-Grafikdateien in das Verzeichnis Bilder kopieren: 
 +  find / -name "*jpg" -exec cp {} Bilder/ \; 2>/​dev/​null 
 +Hier führt ''​find''​ für jede gefundene Datei das Kommando ''​cp''​ ausBei sehr vielen Dateien kann das sehr langsam werden. 
 +  find / -name "*jpg" -print0 ​2> /​dev/​null ​| xargs -0 cp -t Bilder 
 +Hier schreibt ''​find''​ die gefundenen Namen durch ein Nullbyte ''​\0''​ getrennt in die Pipe, aus der ''​xargs''​ liest. Durch die Option ''​-0''​ erwartet ''​xargs'',​ dass die Dateinamen nicht durch ein Zeilenende (''​\n''​),​ sondern durch ein Nullbyte getrennt sind. ''​xargs''​ baut für ''​cp''​ eine lange Parameterliste aus Dateinamen zusammen und übergibt sie. Falls mehr Namen ankommen als auf eine Kommandozeile passen, wird ''​cp''​ ggf. mehrfach aufgerufen, aber viel seltener als im vorigen Beispiel.  
 + 
 +Weil ''​cp''​ üblicherweise das Ziel als letzten Parameter erwartet, muss hier die Option ''​-t''​ verwendet werden, um das Zielverzeichnis zu Beginn anzugeben.  
 +   
 +   
 +===== Fehlerausgabe und Standardausgabe zusammenfassen ===== 
 +Lange Version, geht auch mit anderen Shells als bash: 
 +  find doc/ -xdev -name "​*.jpg" ​/​tmp/​bilder.txt 2>&1  
 + 
 +Nur mit bash: 
 +  find doc/ -xdev -name "​*.jpg"​ &> /​tmp/​bilder.txt 
 + 
 +===== Fehlerausgabe und Standardausgabe mit zweitem Befehl weiterverarbeiten ===== 
 +  find /var -xdev -type d -ls 2>&1 | less 
 + 
 +Nur mit bash: 
 +  find /var -xdev -type d -ls |& less
  
-Fehlerausgabe und Standardausgabe zusammenfassen:​ 
-  find / -mount -name "​*.au"​ 2&>1 > /​tmp/​dateien.txt 
  
-Umgang mit Leer- und Sonderzeichen in Dateinamen: 
-  find Eigene\ Dateien/ -type f -print0 | xargs -0 chmod a-x 
  
 Todo: Beispiel für tee Todo: Beispiel für tee
Zeile 26: Zeile 52:
   wc -l ausgabe1 ausgabe2   wc -l ausgabe1 ausgabe2
  
 +Sonderfall: stdout und stderr unterschiedlich weiterverarbeiten
 +  ((ls -l null eins |nl) 3>&1 1>&2 2>&3 | grep -v '​spezielle fehlermeldung'​ ) 3>&1 1>&2 2>&3
 +Es werden dazu stdout und stderr zweimal reihum getauschst.
 ====== Links ====== ====== Links ======
   * http://​www.tldp.org/​LDP/​abs/​html/​io-redirection.html   * http://​www.tldp.org/​LDP/​abs/​html/​io-redirection.html
  
admin_grundlagen/pipes_und_umleitungen.txt · Zuletzt geändert: 2022/11/21 14:32 von ingo_wichmann