Ich versuche, mit dem Befehl "find" Dateien in meinem Home-Ordner zu finden. Wenn ich jedoch versuche, dies auszuführen, erhalte ich keine Ergebnisse:
locate -i -l 4 --regexp '^\/home\/jack\/[A-Za-z0-9\/\ ]*(My.)*$'
Ich habe es auch versucht, ^\/home\/jack\/^(?!\.)[A-Za-z0-9\/\ ]*(My.)*$
aber das liefert auch keine Ergebnisse.
Die Datei, nach der ich suche, um sie zu testen, ist /home/jack/Music/Foals/My Number.flac
Ich möchte die Ergebnisse versteckter Dateien von meiner Suche ausschließen.
bash
regular-expression
locate
Jack Jones
quelle
quelle
locate
. Ist es sinnvoll,-b
einen Pfad in zu kombinieren (dh "Nur den Basisnamen mit den angegebenen Mustern abgleichen")--regexp
? Warum entkommst du dem/
s?(My.)*
soll tun?My.*$
funktioniert. Sie müssen()
in grundlegenden REs entkommen .--regexp
Nimmt aber eine grundlegende Regex. Versuchen Sie,--regexp
zu--regex
(neinp
) zu wechseln . Die Manpage sagt, dass--regex
es einen erweiterten Regex-Abgleich gibt.Antworten:
Dies scheint den Job zu machen.
Zitate aus dem Handbuch:
quelle
Wie das Auffinden funktioniert
Der Index der Dateien, die der
locate
Befehl verwendet, wird normalerweise nur einmal am Tag neu erstellt. Es ist von diesem Cron Job gebaut/etc/cron.daily/mlocate
. Ihre Einträge sind also wahrscheinlich noch nicht da. Sie können es erneut ausführen, wenn Sie möchten, dass diese Indizes manuell neu erstellt werden.Mit find
Es ist jedoch wahrscheinlich besser, einen Befehl
find
zu verwenden, um beispielsweise Dateien in Ihrem Home-Verzeichnis zu suchen.Verwenden einer GUI
Möglicherweise interessiert Sie auch ein grafisches Suchwerkzeug. Schauen Sie sich dieses andere U & L-Q & A mit dem Titel: GTK Frontend an, um herauszufinden, welches ein solches Tool namens Catfish abdeckt. Dieses Tool kann sowohl
locate
Daten als auchfind
Befehle verwenden.quelle
locate
schneller alsfind
selbst wenn ich eineupdatedb
erste machen muss. Solange die Datenbank auf den meisten Systemen bereits einigermaßen aktuell ist, dauertupdatedb
es nicht lange. Die Suchsyntax ist in diesem Fall jedoch wahrscheinlich einfacher.find
.Sie können auch einen anderen Ansatz wählen:
Ich bin mir nicht sicher, was Sie versuchen zu tun. Sie sind die mit
-i
Flagge es Groß- und Kleinschreibung und Ihre regex zu machen , ist nicht sehr spezifisch, Sie scheinen oben wollen , dass alle Dateien oder Ordner zu finden , die unter sind/home/jack
enthalten und dieMY
,My
,my
odermY
irgendwo im Dateinamen. Wenn ja, laufen Sie einfachquelle
Dies sollte funktionieren - stimmt nur mit nicht versteckten Dateien und Ordnern überein:
Noch einfacher: Dies entspricht Dateien, die nirgendwo im Verzeichnisbaum versteckte Verzeichnisse haben. Wahrscheinlich ist es das, was Sie wollen:
quelle
locate
, da ich versuche, es in eine Python-GUI zu integrieren, um während der Eingabe zu suchen, und es ist schneller. Danke trotzdem!locate
die Ergebnisse beschleunigen. ZB:echo /home/jack/**/*My.*