Die Bash-shell...suchen Befehl... - Namen mit wildcards...alias oder Funktion

Habe ich lange verwendet die find-Befehl zum suchen von Dateien und Verzeichnissen im aktuellen Verzeichnis und allen Unterverzeichnissen, die einem Muster entsprechen:

find . -name "*.txt" -print
find . -name "Bill*" -print

Aber was ich wirklich mag, ist ein alias oder eine Funktion, die wird richtig übergeben, die Platzhalter. (Ich verwendet, um in der Lage sein, dies zu tun in der csh, aber jetzt bin ich mit bash.) Wenn ein alias oder eine Funktion mit der Bezeichnung "fn" waren richtig eingestellt, ich könnte etwas Zeit sparen, indem Sie einfach Folgendes eingeben:

fn "*.txt"
fn "Bill*"

Ideal, ich würde gerne verlieren die Anführungszeichen auch, aber ich vermute, dass vielleicht nicht möglich sein, da die shell erweitern Sie vor dem Aufruf von "fn".

Jede Beratung wäre sehr geschätzt und verschieben Karpal-tunnel-Syndrom.... 🙂

GELÖST: Nach der Diskussion unten, ich habe diese in meine .bashrc-Datei:

fn () {
  find . -name "$1" -print
}

Beachten Sie die Anführungszeichen um das argument: "$1". Diese kann dann aufgerufen werden, mit mehr Anführungszeichen um den filename-expression:

fn "*.txt"

EDIT: muss das Leerzeichen zwischen dem Funktionsnamen und der Klammer, also
fn () { ... [Werke]
fn() { ... [funktioniert nicht]

  • Benötigen Sie eine Funktion, nicht ein alias, weil das argument gehen muss mitten in der expansion. fn() { find . -name "$1" -print; }
  • Ich habe versucht, diese. Aber die "$1" in der Funktion wird erweitert in das aktuelle Verzeichnis. Also, wenn ich versuche, fn *.txt in einem Verzeichnis, das die Datei a.txt dann wird der Befehl zu fn a.txt anstelle von fn *.txt
  • Aha... Die Antwort unten das Problem gelöst. Ich brauchte Zitate sowohl beim Aufruf und in der Funktion, Beschreibung. Vielen Dank für die sehr schnellen Antworten!
  • Sie müssen immer zitieren, das argument der Funktion, wenn es der Platzhalter enthält,...aber die Funktion, wie geschrieben scheint für mich arbeiten, wenn Sie angerufen werden, als fn "*.c" zum Beispiel. Man kann nicht umhin, unter Angabe der wildcard-Ausdruck in der Beschwörung der fn.
  • Ich hätte verbessert Ihre Lösung leicht. Durch meine Funktion fn() { find . -iname "*$1*" -print} kann ich nur fn word und ich find alle Dateien, die mit word, Word, WORD, WoRd oder ähnlich überall in den Dateinamen. Das ist, was ich nach war, vielleicht waren Sie nach etwas anderes.
InformationsquelleAutor Rudi | 2013-10-14
Schreibe einen Kommentar