it-swarm.com.de

Verwenden Sie locate, um ein Verzeichnis zu finden

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 die Ausführung von 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 [email protected] | grep "${last}\$"
    else
        locate [email protected] | grep "/${last}\$"
    fi
}
20
Michael

Ein Weg (ich vermute, es gibt einen besseren Weg) ist, grep zu verwenden, um nur die Pfade zurückzugeben, die auf Ihren Ordnernamen enden:

locate foldername | grep /foldername$
12
misterben

Sie können die Option --regex (-r) von locate verwenden:

locate -r '/log$'
28
Florian Diesch

Hast du es versucht:

locate /home/insertusernamehere/*/filename?

oder

locate file | grep -i '^/home/.*/examplesubdirectory'?

oder eine Variation davon?

5
RolandiXor

Hier ist es

locatedir () {
    locate "$*" | while read line
    do 
    if [ -d "$line" ] ; then echo $line ; fi
    done
}

locatedir $*
2
Linuxuser