1751854 Members
5617 Online
108782 Solutions
New Discussion юеВ

find in root

 
Reen
Advisor

find in root

hi,
I have a file which contains a list of filenames which i have to search in the whole filesystem (root /). I have used a script like
cat file|while read FILENAME
do
find / -name $FILENAME
done
But this is running damn slowly and i fear it may take years to complete this command.
Any one help me out plzzz
12 REPLIES 12
Hemmetter
Esteemed Contributor

Re: find in root

Hi Reen@


What about:

# find / -xdev | grep -f file


rgds
HGH
Luk Vandenbussche
Honored Contributor

Re: find in root

Hi,

find / -xdev -name $FILENAME
Rasheed Tamton
Honored Contributor

Re: find in root

hi,

find / -xdev -type f -name $FILENAME

(type f will only look for normal files)



James R. Ferguson
Acclaimed Contributor

Re: find in root

Hi:

If you truly mean the whole file system, visting every mountpoint, then:

# find / -type f -name ...

...will do that AND potentially take a long time.

If you don't want to visit mountpoints then add the '-xdev' switch as noted:

# find / -xdev -type f -name ...

Notice that in either case I specified only *files* with the '-type f' argument. Drop that if you truly want both files and directories.

Lastly you can reduce the number of searches by doing something like:

# find / -xdev -type f -name myfile -o -name yourfile -o -name "her*" -o -name "his*"

That is, look for files by individual name and perhaps using wildcards. Be sure to quote the metacharacters so that the shell doesn't interpret them.

Regards!

...JRF...
Yogeeraj_1
Honored Contributor

Re: find in root

hi Reena,

You may also consider breaking you code into several parts so that you can launch them in parallel.

kind regards
yogeeraj
No person was ever honoured for what he received. Honour has been the reward for what he gave (clavin coolidge)
Bill Hassell
Honored Contributor

Re: find in root

NEVER, EVER run find on the root directory for a production machine. Of course it will be slow -- you are examining every directory including CDROMs, network filesystems, database files, etc, etc. Why would you look for a file like that? If a user can't find their file, there are VERY few places where the user can create a file, namely: $HOME /var/tmp and /tmp, so your command changes to:

find /home/some_user /var/tmp /tmp -name $FILENAME

If you are looking for a particular command, start with the man pages, then look in the system directories and application directories:

find /usr/bin /usr/sbin /use/lbin /usr/local /usr/contrib /opt/*/bin -name $FILENAME

A typical HP-UX system installation has several thousand files in several hundred directories, most of which you never need to search.

Is there a reason you need to look in every directory in the entire machine?


Bill Hassell, sysadmin
A. Clay Stephenson
Acclaimed Contributor

Re: find in root

If you nevertheless must run find over a large portion of your system'm filetree then I suggest a Plan B:

1) Run find once and write the output to a temporary file - preferably with filters to restrict it to specific filesystems and to restrict it to regular files.
2) Scan this list of files using grep to find the matches.

If it ain't broke, I can fix that.
Reen
Advisor

Re: find in root

Its not tat i want to search in root. I just gave an example. Cos the directory am searching in has many subdirectiories and it is taking lot of time in searching for all the files in all these directories.. any faster way of searching?
Sandman!
Honored Contributor

Re: find in root

Look for ways to narrow down your search for ex. search only 3 filesystems out of however many are present on the server or the filenames have a common extension "*.c" or run the command when the system is under minimal load.

~hope it helps