• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] zeilenweise Ausgabe bei "find"

Guten Abend!

Aufgabe1: Finden von Dateien

Lösung1:
Code:
find / -name datei
Probleme: Keine, die nicht bewältigt werden könnten


Aufgabe2: Finden von Dateien, aber nur das Verzeichnis ausgeben, in dem die Datei gefunden wurde
Lösung2:
Code:
find / -name datei -printf %h
Probleme: Dateien werden nicht zeilenweise angezeigt

Wie erreiche ich es im zweiten Fall, daß die Pfade zu der gesuchten Datei (können ja durchaus mehrere sein) schön ordentlich zeilenweile ausgegeben werden?

Edgar
 
Code:
find / -name datei -printf %h\n | sort -u

Das \n steht für Newline. sort -u kannst anhängen oder nicht.
Ich würde es machen, um zu vermeiden das du unzählige male den selben Pfad ausgegeben bekommst.

Gruß Peter
 
OP
Escho
Das hatte ich mir auch gedacht, aber das funktioniert nicht. Damit bekomme ich die Ausgabe auch nur in eine Zeile hineingequetscht. Das heißt, die Standard-Fehlerausgebe kommt schon zeilenweile, nur das, was ich will, steht in einer Zeile.
Vielleicht noch einmal zur Verdeutlichung mein Problem (mit einer ins Nirwana geschickten Fehlerausgabe):
Code:
find / -name datei -printf %h 2>/dev/null

Edgar
 
Jetzt muss ich doch mal ganz dumm fragen warum du das Newline hinter dem %h nicht eingesetzt hast???
Also
%h\n
Habe ich es zu klein geschrieben?

Gruß Peter
 
OP
Escho
trommelpeter schrieb:
Jetzt muss ich doch mal ganz dumm fragen warum du das Newline hinter dem %h nicht eingesetzt hast???
Ich hatte es eingesetzt, nur vergessen, es mit zu kopieren.:oops: Klappt aber trotzdem nicht, auch wenn ich Anführungszeichen verwende.
Folgendes Script
Code:
#!/bin/sh

name=mplex
pfad=`find / -name ${name} -printf "%h\n" 2>/dev/null | sort -u`
echo ${pfad}

kdialog --msgbox "ende"
macht folgende Ausgabe
Code:
/usr/bin /usr/include/mjpegtools

Edgar
 
OP
Escho
Wenn ich das Ergebnis von find nicht in eine Variable zwischenspeichere, dann funktioniert es und die Ausgabe erscheint zeilenweise.

Da das Ganze später aber einmal in einem Loop funktionieren soll, werde ich jetzt probieren, ob ich's auch mit Variable hin bekomme.

Vielen Dank erstmal für die Double-Quotes.

Edgar
 
Warum unbedingt in eine Variable zwischenspeichern?
Als Alternative gibt es immer noch
... > /tmp/findausgabe.txt

Wenn du es in die Variable aufnimmst sind die Sachen wieder alle hintereinander. Dann musst du den Inhalt der Variable wieder mit einer Schleife Auslesen.

Gruß Peter
 
OP
Escho
Weil ich in einer Schleife die Pfade zu verschiedenen Programmen abfragen will. Und die Programmnamen sind dabei hinterlegt in name.

Ich hab's aber trotzdem geschafft. Was gefehlt hat, waren wieder Double-Quote, diesmal beim echo-Befehl.

So funktioniert es also:
Code:
#!/bin/sh

name=mplex
pfad=`find / -name ${name} -printf "%h\n" 2>/dev/null`
echo "${pfad}"

kdialog --msgbox "ende"
Danke für die Hilfe

Edgar
 
Hoppla! Jetzt bin ich überrascht. Ich dachte das alles was in einer Variable gespeichert ist immer hintereinder statt untereinander gespeichert ist.
Habe also selber auch was dazugelernt. In diesem Sinne auch ein Danke von mir :)

Gruß Peter
 
Oben