Vraag Gebruik locate om een ​​map te vinden


ik gebruik bevind zich de hele tijd om bestanden te vinden waarvan ik de naam ken, bevind zich is erg snel en dat vind ik geweldig. Voor recent gemaakte bestanden vind is geweldig, normaal gesproken met recent gemaakte bestanden weet ik waar ze in feite zijn gemaakt, dus ik hoef niet mijn hele bestandssysteem te doorzoeken.

Wanneer ik de locatie van een map ben vergeten, lijkt noch vind noch vind ik het ideaal.

Locate spuugt altijd veel te veel informatie weg, omdat elk bestand binnen een map ook geschikt is om te lokaliseren. Bijvoorbeeld als ik opzoek was naar een map met de naam log ergens in mijn bestandssysteem log lokaliseren zou tonnen en tonnen resultaten opleveren. Als ik hetzelfde doe met zoeken, vind / -name log -type d vind minuten in beslag nemen en spuugt allerlei machtigingsfouten uit elke keer dat het een map tegenkomt die het niet kan lezen.

Is er een betere manier?

Antwoord: Dus ik blijf bij grep tot ik iets anders vind:

locatedir () {
    for last; do true; done
    if [[ $last == *\/* ]]
    then
        locate $@ | grep "${last}\$"
    else
        locate $@ | grep "/${last}\$"
    fi
}

20
2017-11-27 21:49


oorsprong




antwoorden:


Een manier (ik vermoed dat er een betere manier is) is om grep te gebruiken om alleen die paden terug te zetten die eindigen in je mapnaam:

locate foldername | grep /foldername$

12
2017-11-27 22:08





U kunt de optie gebruiken --regex (-r) van locate:

locate -r '/log$'

28
2017-11-27 23:31



Ja (+1). locate heeft zijn eigen ingebouwde regex capablility: -r of --regex ... voor het volledige scala aan opties, zie: info lokaliseren - Peter.O
Ik wist dat er een betere manier moest zijn! - misterben
Zo kort en het werkt soepel. Geweldige bijdrage! Een andere reden om te leren / te beheersen normale uitdrukkingen - loved.by.Jesus
Je hebt die twee niet nodig ' in dit geval: locate -r /log$ is genoeg. - simlev


Heb je geprobeerd:

locate /home/insertusernamehere/*/filename?

of

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

of enige variatie hiervan?


5
2017-11-27 22:02



Dit antwoord laat dat zien grep is niet noodzakelijk, en zoals te zien in de eerste voorgestelde optie, zijn geen regexps. - Tom


Hier is het

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

locatedir $*

2
2018-06-12 11:27



Als u kunt uitleggen welke wijzigingen u hebt aangebracht, is dit ook nuttig voor anderen. - Ron