Gibt es ein alternatives find
Programm mit einer konventionelleren CLI-Schnittstelle? find
funktioniert und erwartet andere Parameter als die meisten anderen Utils.
Klarstellung: Ich suche ein Programm, das größtenteils die gleiche Funktionalität hat wie find mit einer Befehlszeilenschnittstelle, die funktioniert und sich wie POSIX (oder zumindest GNU) -Befehlszeilenempfehlungen anfühlt.
command-line
software-rec
find
utilities
Tamás Szelei
quelle
quelle
ack
und mich gefragt, ob es auch eine bessere gibtfind
.Antworten:
Dies ist ein weit verbreitetes Missverständnis.
Find folgt der Optionssyntax. Sie verwechseln nur Ausdrucksprimaries mit Optionen:
Die Alternative ist lokalisieren. Find implementiert jedoch seine eigene Ausdruckssyntax, da es eine größere Auswahl an Filter- und Aktionsoptionen bietet. Es gibt keine Alternative, die dasselbe tun könnte, nur weil sie überflüssig wäre.
quelle
find
"Parameter auf schmerzhafte Weise anders erwartet werden als bei den meisten anderen Utils". Sie geben an, dass OP "Ausdrucksprimäre mit Optionen verwechselt". Haben die meisten anderen Tools überhaupt ein Konzept von "Ausdrucksprimären"? Falls nicht, dass nicht zeigen Punkt des OP? Und das ist wirklich nicht der seltsamste Teil des Gebrauchsfind
. Welche andere CLI ist involviert{}
(welche muss natürlich irgendwie ausgeblendet werden)?Dies hängt von der genauen Funktionalität ab, auf
find
die Sie sich verlassen. Wenn es sich (hauptsächlich) um die Suchfunktion handelt, unterstützen einige Shells rekursive Globs. ZB mitzsh
:Zsh hat durch Glob Qualifiers viel mehr findige Möglichkeiten (siehe Ende
man zshexpn
). Beispielsweise:ls -l **/*(.)
≈find -type f -ls
ls *(m-2u:$USER:)
≈find -mtime -2 -user $USER
Bash 4 hat auch
**/
(Sie müssen es aktivierenshopt -s globstar
), aber nichts wie Glob-Qualifikatoren.quelle
Ich würde einen Blick darauf werfen
locate
. Es durchsucht seine Datenbank mit Dateien und druckt schnell die Pfadnamen aus, die Ihren Angaben entsprechen.Wie Sie sehen, handelt es sich um eine Untertextübereinstimmung : Wenn Sie eine Untertextübereinstimmung angeben, stimmt
odg
die Übereinstimmung mit der Untertextübereinstimmung überein . Aber wenn Sie es geben.odg
, dann wird es nicht.Es gibt jedoch einen Nachteil: Es braucht eine Datenbank. Diese Datenbank muss aktualisiert werden, wenn sich etwas ändert. Bei meiner Fedora 13-Installation ist dies jedoch in einer täglichen Crontab enthalten.
quelle
locate
Was versuchst du zu finden? Wenn Sie normalerweise nach Quellcodedateien suchen, schauen Sie sich an
ack
. Es ist im Grunde ein Quellcode-Suchwerkzeug, aber der-f
Schalter von ack findet Dateien, die einem bestimmten Dateityp entsprechen.Wenn Sie also beispielsweise alle Perl-Dateien in einem Verzeichnis suchen möchten, gehen Sie wie folgt vor:
Wenn Ihnen die von ack erkannten Dateitypen nicht gefallen, können Sie Ihre eigenen hinzufügen
~/.ackrc
.ack ist kein universeller Dateisucher
find
, aber wenn Sie mit Quellcode arbeiten, kann es sehr praktisch sein.quelle
silversearcher-ag
Paket auf Hauptdistros.Eines der großartigen Dinge, die jeder Programmierer lernen sollte, ist: Wenn Sie kein Werkzeug finden können, bauen Sie Ihr eigenes!
Ich könnte ein besseres schreiben, mit
-t
Filtern von Typen usw.Bearbeiten : Das obige ist ein Bash-Skript. Es verwendet das Befehlszeilenargument und übergibt es an den Wert der Option -name. Nur ein einfaches Beispiel. Seit ich diese Antwort geschrieben habe, habe ich folgendes Python-Skript gefunden:
https://github.com/sjl/friendly-find/
Das Interface sieht gut aus, aber ich habe seine Leistung nicht getestet. Könnte es wert sein, ausgecheckt zu werden.
quelle
$<
macht in meinem Bash nichts Sinnvolles. Was erwartest du davon? Meinen Sie"$@"
eigentlich? Oder"$1"
(was bedeutet das eigentlich in einem Makefile)?$<
ist dascsh
Äquivalent vonread
- Ich vermute , er damit meinte.Die Standardmethode, um Dinge in Unix zu finden.
quelle
grep | awk
ist ein Antimuster. Siehe nutzlose Verwendung vongrep
. Wenn Sie das Muster parametrisieren möchten,du -a | awk -v "pat=<pattern>" '$0 ~ pat { print $2 }'
awk
, aber einer der großen Vorteile der UNIX-Philosophie ist, dass man nicht alle Funktionen der komplexeren Tools (wieawk
undfind
) verstehen muss, um Pipelines zu erstellen, die die gewünschten Ergebnisse erzielen Aufgabe.grep | awk
Möglicherweise nicht optimal (oder auf einem performanten Multithread-System mit einem hochoptimierten Systemgrep
möglicherweise!), aber es ist einfach .