How to find a directory on linux?

467

115

I have a VPS with Suse Linux 10.3.

I've logged in via SSH/putty and am trying to find where my web files are located.

Since I'm uploading via FTP in a directory called httpdocs, I assume that this directory exists somewhere.

My google searches have taught me to do this, go to my root directory and type:

find httpdocs -type d

but it says "No such file or directory".

How can I find this directory?

Edward Tanguay

Posted 2009-06-28T17:51:46.333

Reputation: 11 955

4In case someone's wondering, the command in the question finds all directories (-type d) in the directory entry httpdocs (relative to the current working directory, usually but not necessarily a directory). It fails with error message because there is no directory entry httpdocs in the system's root directory, and therefore no starting point for a search. – Daniel Beck – 2011-12-30T12:56:16.400

Answers

636

It is:

find / -type d -name 'httpdocs'

the first parameter "/" is where to look, in this case "/" it's the entire system.

-name could be -iname to ignore case

also -type is not mandatory

use : man find for more options

OldJim

Posted 2009-06-28T17:51:46.333

Reputation: 6 596

I prefer iname. – neverMind9 – 2019-07-04T14:47:33.667

93It may not matter for simple searches, but for more complex find commands, it's worth noting that things are evaluated in the order they are on the commandline. So, you might want to have the -type d (directories only) before -name, in order to speed things up. Again, this may not matter much here, but when getting into more complex searches it can improve search speed considerably. – Dominic Eidson – 2009-06-28T19:00:14.823

14Actually, the -name test is faster than most of the other tests since -name is matched against the directory's listing, which is already loaded from disk, and the other tests need to perform a stat(2) to get file information. After the first stat() call for a file, an subsequent tests get from memory, e.g.: -type f -mtime -10. – Arcege – 2011-12-30T12:53:44.750

24If you are going to perform a find on the entire filesystem, especially a server, then it is usually good to use nice so the find doesn't take too many resources from more critical processes: nice find / ... – Arcege – 2011-12-30T12:54:57.027

18I would append 2> /dev/null to avoid having my search results getting hidden in all the permission errors. – Jason Yeo – 2013-08-21T06:48:36.753

63

this command should get you what you are looking for:

find / -type d -name httpdocs

that will search from the root of your server for directories with the name of httpdocs or if you just want to search from the current directory replace the '/' with a '.'

Another command you can try is locate you would do something like:

locate httpdocs

Zypher

Posted 2009-06-28T17:51:46.333

Reputation: 2 077

1Also in many cases, locate will return too many results since all 100k files in that directory will show up. In this particular case if every user has their own httpdocs with 100's or 1000's of files the result the OP wants will probably be lost. – Jistanidiot – 2014-07-16T12:46:47.457

+1 for locate... I keep my database updated so this command is very useful... Great idea. – nicorellius – 2014-08-25T23:01:52.747

I've never looked into it, but updatedb/locate does not index all partitions on all drives, so it doesn't always find things that are there. If what you want is (mounted) under /, it should find it, but if it's on another partition, it probably won't. – Joe – 2016-01-12T01:55:49.867

locate httpdocs tells me "locate: command not found" – Edward Tanguay – 2009-06-28T18:36:29.287

4For those using the "locate" command (given that it exists in your system), make sure that that database it looks up is up-to-date; normally some cron job takes care of it. Otherwise, run "updatedb" (being root). Then run your needed "locate <somefile>". This is necessary for finding recently added files/dirs. – David Ramirez – 2012-11-02T23:23:23.687

+1 for locate. It's a lot faster but only if its index is up to date. Fortunately, something like "httpdocs" won't change location frequently.

If you're planning on repeatedly searching for files on a machine, it's worth the few minutes needed to set up the updatedb cron job. – Doug Harris – 2013-03-25T18:57:43.937

28

find / -type d -name httpdocs 2> /dev/null

This will eliminate all the error messages you'll likely (read, always) get when not doing this as the root user. Would recommend doing it this way.

user2940456

Posted 2009-06-28T17:51:46.333

Reputation: 381

See also How can I exclude all “permission denied” messages from “find”?

– galath – 2017-03-10T10:06:22.570

2The 2> /dev/null option is very helpful. Otherwise it can be hard to see the wanted results... – Gottlieb Notschnabel – 2014-02-14T18:59:48.390

13

It's important to know the parameter -iname to search "case insensitive" patterns and the use of wildcards: *, ?, etc..

Two examples:

Search all files from /root that contains the string "Linux", case insensitive:

find  /root -type f -iname "*linux*"

Search all directories from /root that contains the string "Linux", case insensitive:

find  /root -type d -iname "*linux*"

Extracted from here:

http://www.sysadmit.com/2015/12/linux-buscar-ficheros-directorios-con-find.html

LunaSeven

Posted 2009-06-28T17:51:46.333

Reputation: 131

This question is about how to find a directory whose name you know, not how to find a directory whose name you know (approximately).  Besides, the accepted answer (from over 6 years ago!) already mentions -iname as a case-insensitive alternative to -name. – G-Man Says 'Reinstate Monica' – 2015-12-07T05:23:41.787

10

you almost have it. the correct syntax would be:

find / -type d -name httpdocs

The directory is likely under /var/www/

mattsn0w

Posted 2009-06-28T17:51:46.333

Reputation:

that tells me "paths must precede expression" – Edward Tanguay – 2009-06-28T18:12:39.867