Manchmal möchte ich bestimmte Dateien ausführen, aber nicht bis zum Ordner navigieren.
Wenn ich den Dateinamen kenne und find -name file_name.py
nur ein Ergebnis zurückgebe, kann ich das einfach verwenden?
Anstatt beispielsweise zu einem bestimmten Ordner zu navigieren und Folgendes aufzurufen:
python file_name.py
Kann ich schreiben:
python [ find -name file_name.py ]
oder
python [ locate file_name.py ]
Oder eine Variante für "Durchsuche meinen gesamten Computer nach diesem Dateinamen und verwende ihn"? Am besten in einer Zeile.
command-line
python
find
locate
Charles Clayton
quelle
quelle
Ctrl-p
dannfilename
die Datei zu finden. Die ungefähre ungefähre Zeichenfolgenübereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung wird als Fuzzy-Übereinstimmung bezeichnet und ist eine häufige Funktion in Texteditoren.Antworten:
Ich denke du suchst:
quelle
$
! Ich konnte nicht verstehen, warum Klammern nichts taten. Vielen Dank!Fügen Sie die Zeile
shopt -s globstar
der Datei.bashrc
in Ihrem Home-Verzeichnis hinzu. (Um dies einfach auszuprobieren, geben Sie dies in die Befehlszeile ein. Es wird nur in Ihrer aktuellen Shell wirksam.)Dann können Sie
**/
"im aktuellen Verzeichnis oder in einem Unterverzeichnis usw. rekursiv" bedeuten, dh dasselbe wie einfachefind
Befehle.Vorsichtsmaßnahme:
**/
Durchläuft symbolische Links zu Verzeichnissen,find
nicht jedoch. In Bash können Sie dies nicht vermeiden. In zsh**/
ist es sofort verfügbar und durchläuft keine symbolischen Links (es gibt in***/
den seltenen Fällen Fälle, in denen Sie Symlinks durchlaufen möchten).quelle
find
könnten die beteiligten Methoden reaktionsfähiger sein.**/
ist etwas langsamer alsfind
weilfind
es eine Optimierung hat, die keinestat
Dateien in Blattverzeichnissen aufruft. Aufruffind …| …
oderfind … -exec … \;
reaktionsschneller, da Dateien verarbeitet werden können, sobald sie gefunden wurden, aber$(find …)
zuerst den gesamten Baum durchlaufen müssen, genau wie**/
.Nur um zu zeigen, dass es immer mehr als einen Weg gibt, Dinge zu tun (auch ohne Perl):
find -name file_name.py -exec python {} \;
funktioniert auch. Die exec-Option von find führt den folgenden Befehl für jede gefundene Datei aus. In diesem Befehl
{}
fungiert er als Platzhalter für die Datei und\;
kennzeichnet das Ende des Befehls.quelle
-quit
am Ende desfind
Befehls hinzufügen , ist dies eine gute Antwort:find -name file_name.py -exec python {} \; -quit
Sie können die Ausgabe von find in einer Variablen speichern und damit wie folgt vorgehen:
find -name file_name.py
sucht nach benannten Dateienfile_name.py
und speichert das Ergebnis in einerfile
Variablen. Wenn der Befehl erfolgreich war (die Ergebnisse werden ohne Fehler erhalten), interpretiert Python$file
.quelle
Noch einer:
Versuchen Sie nun als Hausaufgabe, die Vor-, Nachteile und Unterschiede aller hier vorgestellten Methoden zu ermitteln.
quelle