How to find files excluding symbolic links?

LinuxFindSymlink

Linux Problem Overview


I want to find files in Linux that follow a certain pattern but I am not interested in symbolic links.

There doesn't seem to be an option to the find command for that.

How shall I do ?

Linux Solutions


Solution 1 - Linux

Check the man page again ;) It's:

find /path/to/files -type f

type f searches for regular files only - excluding symbolic links.

Solution 2 - Linux

! -type l

For example, if you want to search all regular files in /usr/bin, excluding symlink:

find /usr/bin/ \! -type l

Solution 3 - Linux

Do you want it to follow symlinks but not return them (if they match your pattern)?

find -H?

man find
     ...
     -H      Cause the file information and file type (see stat(2)) returned for each symbolic link specified on the command line to be those of
             the file referenced by the link, not the link itself.  If the referenced file does not exist, the file information and type will be
             for the link itself.  File information of all symbolic links not on the command line is that of the link itself.

     -L      Cause the file information and file type (see stat(2)) returned for each symbolic link to be those of the file referenced by the
             link, not the link itself.  If the referenced file does not exist, the file information and type will be for the link itself.

             This option is equivalent to the deprecated -follow primary.

Solution 4 - Linux

I have readed the MAN and now it seems is -P also, using -type r would raise an error. also notice is the DEFAULT behavior now.

> -P Never follow symbolic links. This is the default behaviour. When find examines or prints > information a file, and the file is a symbolic link, the information used shall be taken from > the properties of the symbolic link itself.

Solution 5 - Linux

Like @AquariusPower say, the use of find -type f -xtype f solved my problem, and now I get only real files and not symbolic links anymore.

From: https://linux.die.net/man/1/find

I got:

> -xtype c
> The same as -type unless the file is a symbolic link. For symbolic links: if the -H or -P option was specified, true if the file is a > link to a file of type c; if the -L option has been given, true if c > is 'l'. In other words, for symbolic links, -xtype checks the type of > the file that -type does not check.

Solution 6 - Linux

This works for me:

find -H . -maxdepth 1 -type f

Actually, don't really need the -H

Solution 7 - Linux

Using ls, a workaround would be:

ls <path> | grep -v '\->'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBarthView Question on Stackoverflow
Solution 1 - Linuxhek2mglView Answer on Stackoverflow
Solution 2 - LinuxVittorio MilazzoView Answer on Stackoverflow
Solution 3 - Linuxron rothmanView Answer on Stackoverflow
Solution 4 - LinuxNandeView Answer on Stackoverflow
Solution 5 - LinuxWellington1993View Answer on Stackoverflow
Solution 6 - LinuxJoyce MView Answer on Stackoverflow
Solution 7 - LinuxaerijmanView Answer on Stackoverflow