如何查找不包含符号链接的文件?


72

我想在Linux中找到遵循某种模式的文件,但是我对符号链接不感兴趣。

find命令似乎没有选项。

我该怎么办?


1
堆栈溢出是一个有关编程和开发问题的网站。这个问题似乎与主题无关,因为它与编程或开发无关。请在帮助中心中查看我可以询问哪些主题。也许超级用户Unix&Linux Stack Exchange是一个更好的选择。
jww

Answers:


93

再次检查手册页;)是:

find /path/to/files -type f

type f 仅搜索常规文件-不包括符号链接。


1
哈哈,是的,我认为常规文件包含符号链接。对于那个很抱歉。好吧,您将得到一个简单问题的要点:)
Barth 2013年

2
在这里,它与指向常规文件的符号链接匹配,我不得不使用-type f -xtype f
Aquarius Power

@AquariusPower我无法重现。find您使用的是哪个版本?
hek2mgl

3
find (GNU findutils) 4.4.2,这里是测试案例:echo >>asdf.txt;ln -s asdf.txt asdf.txt.lnk;find -type f;echo;find -type f -xtype f
Aquarius Power

我得到了两次,./asdf这似乎证明-type f可以达到相同的结果
。– hek2mgl

24
! -type l

例如,如果要搜索/ usr / bin中的所有常规文件(不包括symlink):

find /usr/bin/ \! -type l

没有-type l只会搜索符号链接。结帐手册页
laserbeamer 2015年

5
否定测试用“!” (pling)-如有必要应进行转义-将返回不属于符号链接的任何内容。
MikeW 2015年

1
这应该是正确的答案,因为它对我有效,而不是-f允许符号链接fyi损坏
Mike Q

3

您是否希望它遵循符号链接而不返回符号链接(如果它们与您的模式匹配)?

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.

3

我已经阅读了MAN,现在看来-P也是如此,使用-type r会引发错误。还请注意,现在是DEFAULT行为。

-P请勿遵循符号链接。这是默认行为。当find检查或打印文件信息时,该文件是符号链接,则所使用的信息应取自符号链接本身的属性。


1
是的,但是OP并不希望任何来自symlink的结果-我想避免重复处理,因为'find'可能会将“真实”文件和由symlink寻址的文件都返回到同一“真实”文件。
MikeW 2015年

0

就像@AquariusPower这样说,使用 find -type f -xtype f 解决了我的问题,现在我只获得了真实文件,而不再获得符号链接。

来自:https : //linux.die.net/man/1/find

我有:

-xtype c与-type相同,除非文件是符号链接。对于符号链接:如果指定了-H或-P选项,则该文件为指向c类型文件的链接时为true;否则为true。如果已给出-L选项,则当c为'l'时为true。换句话说,对于符号链接,-xtype检查-type不检查的文件的类型。

谢谢。


0

这对我有用:

find -H . -maxdepth 1 -type f

实际上,真的不需要-H


-f型对我不起作用,我仍在断开符号链接!型升上面提到工作对我来说
麦克Q
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.