I use locate all the time to find files that I know the name of, locate is very fast and I love that. For recently created files find is great, normally with recently created files I know where basically they were created so I don't have to search my entire file system.
When I've forgotten the location of a directory however neither find nor locate seem ideal.
Locate always spits out far too much information because every file within a directory is also a match for locate. For instance if I was searching for a directory named log somewhere on my file system locate log would return tons and tons of results. If I do the same thing with find, find / -name log -type d find takes minutes to run and spits out all sorts of permissions errors every time it encounters a folder it can't read.
Is there a better way?
Answer: So I'm sticking with grep until I find something else:
locatedir () {
for last; do true; done
if [[ $last == *\/* ]]
then
locate $@ | grep "${last}\$"
else
locate $@ | grep "/${last}\$"
fi
}
locate
has its own built-in regex capablility:-r
or--regex
... for full range of options see: info locate – Peter.O Nov 28 '10 at 04:25'
in this case:locate -r /log$
is enough. – simlev Sep 26 '17 at 08:56