staging.inyokaproject.org

bash alias

Status: Gelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

thork

Anmeldungsdatum:
17. Februar 2020

Beiträge: Zähle...

Hallo

Ich versuche einen alias (.bashrc) zu erstellen der rekursiv alle Verzeichnisse und Files nach dem zu suchenden String durchsucht. Den zu suchenden String möchte ich als Argument übergeben können.Mein Versuch klemmt, was mache ich falsch?

Gruss thork

alias find1='find ./ -type f -exec grep -i "$1"'



Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Hm, also da gibt es mehrere Fehler bei dem Ansatz: Alias kennt so etwas wie $1 nicht. $1 gibt es nur für Funktionen und Skripte.

Und dein Konstrukt mit dem find ist komisch. Warum verwendest Du nicht direkt grep mit -r?

Du könntest in deinem bin-Verzeichnis ein Skript, z.B. dgrep, anlegen mit folgendem Inhalt:

#!/bin/bash
grep -r "$1" *

Das wäre dann so aufrufbar:

dgrep Suchbegriff

Ist aber wirklich die Frage ob man dafür einen eigenen Befehl braucht. Und das Skript würde keine versteckten Dateien durchsuchen.

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Ich sehe gerade, dass es sogar das spezielle Kommando rgrep zum rekursiven Durchsuchen von Verzeichnissen gibt...

karzer Team-Icon

Wikiteam
Avatar von karzer

Anmeldungsdatum:
10. April 2022

Beiträge: 1575

Doc_Symbiosis schrieb:

Ich sehe gerade, dass es sogar das spezielle Kommando rgrep zum rekursiven Durchsuchen von Verzeichnissen gibt...

Das wäre dann:

rgrep -i "$1" ./ 

Doc_Symbiosis schrieb:

Du könntest in deinem bin-Verzeichnis ein Skript [..]

Lieber mit chmod a+x SKRIPT das Skript ausführbar machen und dann mit dgrep.sh SUCHBEFEHL aufrufen. Die Bash-Completion funktioniert auch so.

trollsportverein

Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 5232

Für die .bashrc würde wohl eher eine function geeignet sein:

findefix () 
{ 
    find "$1" -name "$2" 2> /dev/null
}

Anwendung im Terminal dann:

findefix VERZEICHNIS SUCHBEGRIFF

Mit declare lassen sich die bereits vorhandenen function Einträge in der .bashrc abfragen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Man kann auch einfach statt eines Alias eine Funktion in ~/.bash_aliases definieren.

1
ff() { grep -ir "$1" .; }

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

trollsportverein schrieb:

Für die .bashrc würde wohl eher eine function geeignet sein:

findefix () 
{ 
    find "$1" -name "$2" 2> /dev/null
}

Anwendung im Terminal dann:

findefix VERZEICHNIS SUCHBEGRIFF

Er will nach Texten in Dateien suchen, nicht nach Dateinamen, soweit ich verstanden habe.

1
2
3
4
findefix () 
{ 
    find -type f -exec grep -i "$1" ";"
}

thork

(Themenstarter)

Anmeldungsdatum:
17. Februar 2020

Beiträge: 4

Hallo community, besten Dank für die zahlreichen Antworten. Den Vorschlag eine Funktion zu benutzen, hat mich am meisten angesprochen und das funktioniert ziemlich gut. Daher schliesse ich diesen Task wieder. Gruss thork

trollsportverein

Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 5232

user_unknown schrieb:

Er will nach Texten in Dateien suchen, nicht nach Dateinamen, soweit ich verstanden habe.

Dann würde ich es so in etwa machen:

findefix () 
{ 
    grep --color=auto -irIn "$2" "$1" 2> /dev/null
}

Anwendung im Terminal dann:

findefix VERZEICHNIS SUCHBEGRIFF

karzer Team-Icon

Wikiteam
Avatar von karzer

Anmeldungsdatum:
10. April 2022

Beiträge: 1575

trollsportverein schrieb:

Dann würde ich es so in etwa machen:

Das --color=auto kannst Du dir sparen.

Antworten |