Ich benutze locate die ganze Zeit, um Dateien zu finden, deren Namen ich kenne. Locate ist sehr schnell und ich liebe das. Für kürzlich erstellte Dateien ist find großartig. Normalerweise weiß ich bei kürzlich erstellten Dateien, wo sie erstellt wurden, damit ich nicht mein gesamtes Dateisystem durchsuchen muss.
Wenn ich den Ort eines Verzeichnisses vergessen habe, scheinen jedoch weder Finden noch Lokalisieren ideal.
Locate gibt immer viel zu viele Informationen aus, da jede Datei in einem Verzeichnis auch mit locate übereinstimmt. Wenn ich zum Beispiel irgendwo in meinem Dateisystem nach einem Verzeichnis namens log suchte , würde locate log Tonnen und Tonnen von Ergebnissen zurückgeben. Wenn ich dasselbe mit find mache , dauert find / -name log -type d find Minuten und spuckt jedes Mal alle möglichen Berechtigungsfehler aus, wenn es auf einen Ordner stößt, den es nicht lesen kann.
Gibt es einen besseren Weg?
Antwort: Also bleibe ich bei grep, bis ich etwas anderes finde:
locatedir () {
for last; do true; done
if [[ $last == *\/* ]]
then
locate $@ | grep "${last}\$"
else
locate $@ | grep "/${last}\$"
fi
}
locate
hat seine eigene eingebaute Regex-Fähigkeit:-r
oder--regex
... für alle Optionen siehe: info locate'
in diesem Fall nicht:locate -r /log$
ist genug.Hast du es versucht:
locate /home/insertusernamehere/*/filename
?oder
locate file | grep -i '^/home/.*/examplesubdirectory'
?oder eine Variation davon?
quelle
grep
nicht erforderlich ist, und wie in der ersten vorgeschlagenen Option gezeigt, handelt es sich auch nicht um reguläre Ausdrücke.Hier ist es
quelle