find: Dateinname Pfad anstatt Pfad/Dateinname

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
whatsmyname2009
Beiträge: 75
Registriert: 26.05.2007 10:25:48

find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von whatsmyname2009 » 25.01.2010 15:17:35

Hi Leute,

weiß jemand wie ich mir ein Ergebnis von find darstellen kann, dass jeweils "<Dateiname> <Pfad>" anstatt "<Pfad><Dateiname>" augegeben wird?

Danke im Vorraus,
DS

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von Meillo » 25.01.2010 15:26:23

Pipe die Ausgabe durch ein Programm das sie umformatiert.

Beispielsweise so

Code: Alles auswählen

find DIR | sed 's,\(.*\)/\(.*\),\2 \1,'
oder so

Code: Alles auswählen

find DIR | awk -F/ '{ printf $NF " "; sub("/[^/]*$",""); print }'
Use ed once in a while!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von Duff » 25.01.2010 15:53:05

Oder mit "bash"-Mitteln.

Code: Alles auswählen

for i in $(find . -type f); do  printf "%-50s --> %-s\n" "DIR: ${i%/*}" "FILE: ${i##*/}"; done
Oh, yeah!

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von nepos » 25.01.2010 15:56:28

Warum mit Bash-Hilfsmitteln? find bringt doch schon selber ein printf mit. Siehe auch man find.

123456
Beiträge: 6126
Registriert: 08.03.2003 14:07:24

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von 123456 » 25.01.2010 17:38:13

genau, warum einfach wenns auch kompliziert geht. :)

so in etwa:

Code: Alles auswählen

find /bin -name mount -printf "%P %h\n"

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von Meillo » 25.01.2010 18:25:37

nepos hat geschrieben:find bringt doch schon selber ein printf mit.
(du meinst GNU find)

Nett. Aber nichts für welche, wie mich, die nach der Unix-Philosophie leben.

Mit anderen Worten: find könnte simpler sein, wenn die Leute kein eingebautes printf wöllten. Oder: Wenn man etwas schon durch die Kombination von bestehenden Programmen erreicht, dann sollte man die Funktionalität nicht noch zusätzlich *in* ein Programm einbauen, außer es gibt sehr gute Gründe dafür. (Stichwort: Orthogonalität)

However ...
Use ed once in a while!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von Duff » 26.01.2010 07:55:40

ub13 hat geschrieben:genau, warum einfach wenns auch kompliziert geht. :)

so in etwa:

Code: Alles auswählen

find /bin -name mount -printf "%P %h\n"
Ist wohl war ;-)
Oh, yeah!

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von nepos » 26.01.2010 10:29:38

Meillo hat geschrieben:
nepos hat geschrieben:find bringt doch schon selber ein printf mit.
(du meinst GNU find)

Nett. Aber nichts für welche, wie mich, die nach der Unix-Philosophie leben.

Mit anderen Worten: find könnte simpler sein, wenn die Leute kein eingebautes printf wöllten. Oder: Wenn man etwas schon durch die Kombination von bestehenden Programmen erreicht, dann sollte man die Funktionalität nicht noch zusätzlich *in* ein Programm einbauen, außer es gibt sehr gute Gründe dafür. (Stichwort: Orthogonalität)

However ...
Das ist mir schon klar. Da gibts einige mehr Tools, die in der GNU-Version mehr können bzw. sich anders verhalten. Da bin ich selber schon drüber gestolpert (GNU tar vs. Solaris tar). Andererseits, wir sind hier in einem Linux-Forum und der Fragesteller hat auch nichts davon gesagt, dass das ganze auf Solaris, HPUX, *BSD oder sonstigem funktionieren soll. Von daher finde ich meinen Hinweis auf das find-eigene printf schon ok :)

Ob man solche Features unbedingt immer in "einfache" Tools wie find und Co einbauen sollte, das ist ein ganz anderes Thema und gehört denke ich nicht hierher :)

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von Meillo » 26.01.2010 15:27:23

nepos hat geschrieben: Andererseits, wir sind hier in einem Linux-Forum und der Fragesteller hat auch nichts davon gesagt, dass das ganze auf Solaris, HPUX, *BSD oder sonstigem funktionieren soll. Von daher finde ich meinen Hinweis auf das find-eigene printf schon ok :)
Sehe ich nicht anders. Ich finde deine Antwort mit dem printf sehr gut. (Das ``Nett'' war ganz ernst so gemeint.)
Ob man solche Features unbedingt immer in "einfache" Tools wie find und Co einbauen sollte, das ist ein ganz anderes Thema und gehört denke ich nicht hierher :)
Es ist off Topic, das stimmt.

Wenn die Frage in einem Thread beantwortet ist, dann ist es IMO nett noch ein bisschen über das Thema hinaus zu diskutieren. Der Hintergrund ist: Es soll kein Frage-Antwort-Forum sein, sondern wir alle sollten voneinander lernen. Als Beispiel [0]: Die Frage war im vierten Post schon beantwortet, die anschließende Diskussion war aber hoch spannend, und sicher nicht nur für mich bereichernd. Ebenso in [1].

[0] http://debianforum.de/forum/viewtopic.php?f=34&t=114564
[1] http://debianforum.de/forum/viewtopic.php?f=29&t=113640

Das printf von find ist ein sehr gutes Beispiel gegen die Unix Philosophie, und gleichzeitig lässt sich hier sehr schön zeigen wie man ihr folgen kann. Deshalb mein Kommentar.
Use ed once in a while!

yeti

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von yeti » 27.01.2010 04:09:49

@Meillo

Weiter so!

:THX:

whatsmyname2009
Beiträge: 75
Registriert: 26.05.2007 10:25:48

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von whatsmyname2009 » 29.01.2010 13:06:05

Kann ich "%h" auch noch weiter manipulieren um den Pfad z.B. nur ab einer bestimmten Tiefe anzuzeigen also %h ohne führendes "foo/bar" auszugeben wenn ich "find /foo/bar" gemacht habe?

Gruss,
DS

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von Meillo » 29.01.2010 13:24:58

whatsmyname2009 hat geschrieben:Kann ich "%h" auch noch weiter manipulieren um den Pfad z.B. nur ab einer bestimmten Tiefe anzuzeigen also %h ohne führendes "foo/bar" auszugeben wenn ich "find /foo/bar" gemacht habe?
Mit meinem Ansatz problemlos. :-D

(Danke für die Frage, da sie den Nagel auf den Kopf trifft.)
Use ed once in a while!

whatsmyname2009
Beiträge: 75
Registriert: 26.05.2007 10:25:48

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von whatsmyname2009 » 29.01.2010 13:27:18

Ja gut aber wie denn?

Gruss,
Daniel

yeti

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von yeti » 29.01.2010 14:00:32

whatsmyname2009 hat geschrieben:Ja gut aber wie denn?
Ein Beispiel für's Lösen Deines Problems mittels sed oder awk hast Du jeweils von Meillo brkommrn. Die Details, die Dir fehlen, um dies Deinen Wünschen anzupassen findest Du per "man 1 sed" bzw "man 1 awk".

whatsmyname2009
Beiträge: 75
Registriert: 26.05.2007 10:25:48

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von whatsmyname2009 » 29.01.2010 14:21:31

yeti hat geschrieben:
whatsmyname2009 hat geschrieben:Ja gut aber wie denn?
Ein Beispiel für's Lösen Deines Problems mittels sed oder awk hast Du jeweils von Meillo brkommrn. Die Details, die Dir fehlen, um dies Deinen Wünschen anzupassen findest Du per "man 1 sed" bzw "man 1 awk".
Wie oft gibt es verschiedene Lösungen. Aber wie kann ich denn fprint-Variablen manipulieren ("${h#/foo/bar/}" wie in der Shell funktioniert hier nicht, oder)?

Gruss,
DS

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: find: Dateinname Pfad anstatt Pfad/Dateinname

Beitrag von Meillo » 29.01.2010 14:27:25

whatsmyname2009 hat geschrieben:Ja gut aber wie denn?
Wenn du ``foo/bar'' am Anfang der Zeile wegschneiden willst, dann mach doch genau das. Z.B. mit dem s Kommando von sed. Einfach ein passendes s Kommando an den Anfang des sed-Programms setzen.

Ich kann dir das natürlich problemlos aus dem Kopf hier hinschreiben ... aber eigentlich mache ich das viel zu oft. Es ist sicher nicht ganz schlecht, wenn du selbst mal nachschaust und uns was bietest. Das muss keine perfekte Lösung sein, aber etwas das schon ungefähr tut was gewünscht ist. Dann helfen wir weiter, und du lernst eine Menge dabei.


(aber btw: den von dir als Beispiel gegebenen Fall deckt doch %P schon ab.)
Use ed once in a while!

Antworten