Martin Gregorie wrote: > On Sat, 2011-08-27 at 14:32 -0500, jorl17 wrote: > > > locate is another utility similar to find but that uses indexing > > (someone correct me if that's wrong) to make it work faster > > > > > 'locate' is fast because it searches a database of all the filenames in > the system. The database is rebuilt on a daily basis when the cron > daemon runs 'updatedb' via the mlocate.cron script [1], so it can can be > up to 24 hours out of date. The command 'locate text' will list all the > files or directories that have 'text' anywhere in their absolute > pathname, i.e. if you wanted to find a file called recipes_etc and > entered the command 'locate etc', locate would list it if it existed > when updatedb was last run but would also list the several hundred files > in the /etc directory structure. 'locate' is very fast because all the > text it searches is gathered into one place but you have to be aware > that its never fully up to date, that it is matching on absolute path > names and that it always looks at every filename anywhere in your > system. > > 'find', on the other hand, is a lot slower because it has to read > through all the directories its been asked to search but is always > up-to-date because it is looking directly at the filing system. It has > fewer gotchas because of this. It can also search just a selected part > of the filing system. e.g. if you are on your $HOME directory, running > > find . -name '*etc*' > > will only search the current directory ('.') and all the directories > within it. Specifying the search text as '*etc*' is necessary to find > files containing 'etc'. If you just asked for 'find . -name etc' it > would only find files and directories whose name is 'etc' and only > 'etc'. If you put globs (* matches zero or more characters) or question > marks (? matches a single character in that position) in the search > pattern you should enclose them in single quotes to prevent the shell > from expanding them. > > Find is extremely versatile: it understands and can use file creation > time or last access time as search terms and can also run commands > against matching files: > > find . -name '*.bak' -exec rm {} \; > > will delete all files with a .bak extension in the current directories > and those inside it. {} is replaced with the matching file name when the > command (rm) is run and ; ends the command to be run: it has to be > escaped as shown so it will be included as the end of the -exec command > rather that the shell taking it as the end of the 'find' command. > > [1] cron normally runs the jobs in /etc/cron.daily around 3AM but, if > the computer isn't running then, it will remember that some jobs haven't > been run when its next started and will run them some time on the next > hour or two. > > Martin Exactly, thanks. That's pretty much what I meant with "indexing", though it was not the right term at all. The point is that OP has to understand how all these tools work and how his/her OS is built. These commands that we've all learned to use are pretty much gibberish talk to OP. Thanks Martin, that was a really good explanation for OP!