Linux Befehle

Bunny_Joe

BIOS-Overclocker(in)
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
 
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*")
 
Hmm soweit ich das verstanden habe, kann man dort nur die Dateien nach dem Inhalt durchschen. Sehe nirgends etwas zum Namen.
 
Das suchen musst du so

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

Ansonsten könntest du auch
Code:
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).
 
Zuletzt bearbeitet:
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.
 
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
 
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.
 
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.
 
Kann man, denn cat | grep ist redundant.

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

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

//edit: Zweite Seite übersehen. ;)
 
Zuletzt bearbeitet:
Zurück