# Linux Befehle



## Bunny_Joe (13. Januar 2014)

Hallo Leute,

Ich habe hier ne kleine Aufgabe, an der ich mir gerade den Kopf zerbreche.
ich muss in meinem HOME-Ordner nach Dateien suchen, die irgendwo ein x im Namen haben.
Da hab ich erstmal den Befehl hier: find . -name “*x*“
Ein kleines Problem ist, dass der mir nicht nur die passenden Dateien aus dem HOME-Ordner anzeigt, sondern auch alle passenden Dateien der Unterordner.
Was muss ich da ändern, damit er mir das nur aus dem aktuellem Ordner anzeigt?
Und die eigentliche Aufgabe:
Ich soll den Inhalt aller Dateien ausgeben, in denen das gesuchte Zeichen (also "x") vorkommt.
Zum Ausgeben von Inhalten habe ich ja den Befehl: cat
Nur wie verbinde ich jetzt diese beiden Befehle?

MfG,

Bunny_Joe


----------



## blackout24 (13. Januar 2014)

Kannst -maxdepth 1 -type f in find benutzen um nur eine Ebene Tief zu suchen und dich nur auf Dateien zu beschränken. Um für cat den Output eines anderen Befehls als Parameter zunehmen einfach cat $(find . -maxdepth 1 -type f -name "*x*")


----------



## Bunny_Joe (13. Januar 2014)

Ugh...Danke für die Hilfe, aber ich bekomme da unendlich viel unverständlichen Code.


----------



## bprolikeme (13. Januar 2014)

Ließ dir mal den grep Befehl durch.  Das würde dir glaub ich helfen..." man grep " zeigt dir was es macht


----------



## Bunny_Joe (13. Januar 2014)

Hmm soweit ich das verstanden habe, kann man dort nur die Dateien nach dem Inhalt durchschen. Sehe nirgends etwas zum Namen.


----------



## bprolikeme (13. Januar 2014)

Ah ..sh*t, sry  hab da nicht genau gelesen.


----------



## wollekassel (13. Januar 2014)

Dieses Linux da scheint ja sehr benutzerfreundlich zu sein  -> Aber es gibt Hilfe: Win 8.1


----------



## Bunny_Joe (13. Januar 2014)

wollekassel schrieb:


> Dieses Linux da scheint ja sehr benutzerfreundlich zu sein  -> Aber es gibt Hilfe: Win 8.1


 
Sag das mal dem Professor 

Hat schon Sinn, warum wir uns mit Linux beschäftigen sollen.


----------



## TempestX1 (14. Januar 2014)

Das suchen musst du so


```
find -maxdepth 1 -type f -name "*x*"
```
Den Punkt kannst du weglassen da . = aktuelles Verzeichnis.

Ansonsten könntest du auch 

```
find ~ -maxdepth 1 -type f -name "*x*"
```
eingeben falls du dich nicht in Home befindest, aber in Home suchen möchtest.

Das ~ steht für Home (des aktuell angemeldeten Users).


----------



## Bunny_Joe (14. Januar 2014)

Vielen Dank schon mal an eure Hilfe! 

Hat jemand noch einen Lösungsvorschlag für das andere Problem?
Der Vorschlag von blackout24 funtioniert leider nicht.


----------



## maikeru (14. Januar 2014)

anderes problem?

ist die aufgabenstellung cat mit find zu verknüpfen?


----------



## Bunny_Joe (14. Januar 2014)

ja ich habe das auch schon mit | versucht zu verknüpfen, doch funktioniert das nicht wie gewollt.


----------



## blackout24 (14. Januar 2014)

Bunny_Joe schrieb:


> ja ich habe das auch schon mit | versucht zu verknüpfen, doch funktioniert das nicht wie gewollt.


 
Kann ja auch nicht gehen du willst ja nicht den Output von einem Befehl in den anderen Pipen du möchtest ihn als Parameter für den ersten Befehl nutzen. Dafür brauchst du die Befehlssubstitutionszeichen wie $ und `. Bei mir funktioniert cat $(find . -maxdepth 1 -type f -name "*x*") wunderbar oder halt cat `find . -maxdepth 1 -type f -name "*x*"` was das gleiche macht. Zur Not einfach ne for-Schleife basteln  for i in $(find . -maxdepth 1 -type f -name "*x*"); do cat $i; done


----------



## maikeru (14. Januar 2014)

also auf gut deutsch wird damit der inhalt jeder datei angezeigt die im Namen ein x beinhaltet.
ausgehend von dem ordner in dem du bist jeweils eine etage tiefer.

d.h. wenn du das in deinem Home verzeichnis ausführst kann das jede menge output zur folge haben.

zum besseren verständnis empfehle ich dir ein paar youtube videos zu bashscripting anzuschauen.


----------



## Bunny_Joe (14. Januar 2014)

Danke an euch!


----------



## blackout24 (14. Januar 2014)

Wenn du jetzt von jeder Datei mit x im Dateinamen den Inhalt nach einem bestimmten Wort durchsuchen wollen würdest, würdest du natürlich das Pipe Zeichen und grep benutzen. In dem Fall würdest du ja den Output in grep als Output übergeben wollen.

cat $(find . -maxdepth 1 -type f -name "*x*") | grep suchbegriff

Wahrscheinlich kann man das aber auch mit grep, egrep und fgrep direkt machen mit ein paar Parametern.


----------



## VikingGe (16. Januar 2014)

Kann man, denn cat | grep ist redundant.

grep suchbegriff `find . -maxdepth 1 -type f -name "*x*"`

tut denselben Job.


----------



## joasas (20. Januar 2014)

cat  $(find ~/ -maxdepth 1 -iname "*x*" -type f)

//edit: Zweite Seite übersehen.


----------

