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

Ausgabe von find durch eine pipe schicken

Chaote

Newbie
hallöle und frohe weihnachten erstma :D

ich hab da ein prob, ich suche ein bestimmten befehl
der befehl soll mir alle datein in einem ordner suchen die mit .o oder .ko enden. soweit hab ich den befehl ja auch

find /bla/bla...../ -type f -iname '*.o' -or -iname '*.ko'

aber er soll auch die gefundenen datein in eine datei schreiben, aber ohne die endungen (.o , .ko) was müsste ich hinter der pipe setzen???

Beispiel:
gefunden: aes-i586.ko
in der datei dann: aes-i586

gesucht:
find /bla/bla...../ -type f -iname '*.o' -or -iname '*.ko' | ????????????????

mfg micha
 
Code:
#!/bin/bash
(
IFS="\n";
for i in `find ...`; do
    echo "${i%.ko}";
done;
) >dateiliste.txt
Klappt nicht mit obskuren Dateinamen, die ein Newline im Dateinamen haben.
 
OP
C

Chaote

Newbie
ganke scg für die umleitung der anfrage

und jengelh
aber ist das ein shell-befehl??? das ist ein scipt, aber ich suche ein shell befehl. aber danke dir trotzdem :wink:

ich erkläre es einmal genauer.
Ich bin dabei mir Gentoo zu inst. auf meinen rechnern.
nach dem kernel-combilieren soll ich alle datein mit .o und .ko-endungen in die make.conf eintragen. aber dies sind (in A4-seiten) 9Seiten, also viel zu schreiben.
durch einen kollegen weiß ich, das es dafür ein befehl für die shell gibt, der mit 'find .....' anfängt und mit ' | .......... ' dann erweitert wird. und dies suche ich (' | .......... ')

mfg micha
 

gameboy

Hacker
Chaote schrieb:
gesucht:
find /bla/bla...../ -type f -iname '*.o' -or -iname '*.ko' | ????????????????
Wie wäre es damit:

Code:
find /bla/bla...../ -type f -iname '*.o' -or -iname '*.ko' | perl -pe 's/.o$|.ko$//'
Viele Grüße,
gameboy.
 
OP
C

Chaote

Newbie
danke gameboy,

aber wo landet es???? sehe nach der pipe keine zieldatei wo es eingetragen werden soll. :cry:
 

gameboy

Hacker
Die Ausgabe erfolgt zunächst einmal in die Standard-Ausgabe (STDOUT). Willst Du das ganze in eine Datei umleiten, dann sieht das so aus:

Code:
find /bla/bla...../ -type f -iname '*.o' -or -iname '*.ko' | perl -pe 's/.o$|.ko$//' >ausgabe.txt
Danach befindet sich die Ausgabe im aktuellen Verzeichnis in der Datei ausgabe.txt.
 
OP
C

Chaote

Newbie
ok, ich versuchs mal. meld mich gleich wieder hier.


so, da bin ich wieder. er macht es nicht so wie ich es möchte.

ich beschreib mal fix, was er nun macht und wie es sein sollte.

er findet was, z.B:' /lib/moduls/<kernel>/driver/block/cciss.ko' nun trägt er dies auch in die datei ein, aber leider mit dem pfad und der endung. er soll aber nur den namen ohne pfad und ohne endung in die datei schreiben. also so das dann in der datei nur das 'cciss' drin steht.

aber dank dir trotzdem für deine mühe gamboy :)

achja, nen kollege meinte, das es da ein fing ............ | cut............ befehl gibt, nur er weiß ihn auch nicht mehr. :cry:
 

stka

Guru
Das geht mit 2 Befehlen
find /lib/modules/2.6.13-15.7-default/ -name "*.o" -or -name "*.ko" > module -exec basename {} \;
awk -F. '{ print $1 }' module > module2

Das klappt aber dann nur wenn im Dateinamen nur ein "." vorkommt, sollte aber bei allen Modulen so sein
 
OP
C

Chaote

Newbie
danke stka

aber wo schreibt er das dann hinein??? ich sehe wieder keine zieldatei wo er die gefundenen sachen reinschreiben soll. :(
 

stka

Guru
HÄÄÄÄÄÄÄÄ :shock: :shock:
Da ist jeweils ein Ausgabeumleitung in der Zeile >module und >module2 Da steht dein Ergebnis drin
 
OP
C

Chaote

Newbie
:D habs mal am Schleppy getestet. und es geht. danke dir stka.
hast mir damit 9 (A4)Seiten getippse erspart. :D :D
 

stka

Guru
Ich würde das eventuell zwei mal durchlaufen lassen, einmal mit *o und einmal mit *ko dann hast du die Module in getrennten Dateien. Da du ja die Endung abschneidest, weißt du hinterher nicht mehr was ist ein 2.4 Modul und was ein 2.6 Modul
 
Chaote schrieb:
und jengelh
aber ist das ein shell-befehl??? das ist ein scipt, aber ich suche ein shell befehl. aber danke dir trotzdem :wink:
*patsch* Was glaubst du, woraus ein Shellscript besteht? Richtig, aus Befehlen. Wenn du die #!/bin/bash-Zeile wegnimmst (die ich ja als Hinweis dahingesetzt habe), hast du einen Befehl, den du auch so per Hand "jetzt direkt" eingeben könntest.
(Und um genau zu sein ist es ein geschachtelter Befehl, aber egal.)
 

abgdf

Guru
Ich hab mal sowas ähnliches gefragt und dabei eine schöne Antwort erhalten:

http://mandrivauser.de/index.php?option=com_smf&Itemid=73&expv=0&topic=11188.new#new

Antwort zur dortigen Frage:
find . -name '*.mpg' -exec cp {} /home/Benutzer/ \;

(Müßte für die Frage hier auch auf cat oder echo umzuschreiben sein).

Beste Grüße
 
Oben