使用 -L 查找用法

Ank*_*wal 42 find symlink

我有

link -> file
Run Code Online (Sandbox Code Playgroud)

我愿意

find -L . -name 'link'
Run Code Online (Sandbox Code Playgroud)

并得到

./link
Run Code Online (Sandbox Code Playgroud)

这是为什么?

man find 说:

-L :遵循符号链接。当 find 检查或打印有关文件的信息时,所使用的信息应取自链接指向的文件的属性,而不是来自链接本身(除非它是损坏的符号链接或 find 无法检查文件)链接指向的)。

Kyl*_*nes 38

一般规则是,如果命令对链接(即目录条目,它们是指向 inode 的指针)进行操作,则该命令将符号链接视为它们本身而不是链接指向的对象。否则,该命令对符号链接指向的内容进行操作。因此cp默认情况下遵循符号链接并复制链接指向的文件的内容。但是当您要求cp通过指定处理目录条目时-R,它会停止跟踪符号链接。 mv始终与目录条目一起使用,因此它从不遵循符号链接。

find命令的正常活动是对目录条目进行操作,因此默认情况下不跟随符号链接。添加-L原因find以跟随所有属性的符号链接,除了在进行目录搜索时不能忽略的属性,名称。的目的之一find -name是为像mvrm这样的命令提供输入,这些命令对目录条目进行操作。如果find -L dir -name可以生成指向以dir.

  • @Kyle Jones `如果`find -L dir -name` 可以产生指向以dir 为根的目录树之外的名称,将会有令人不快和令人惊讶的结果。` => 不应该是:会有令人不快的......如果`find dir -name 模式` ... ? 因为添加 -L 允许指向外部目录 (2认同)

Kev*_*vin 18

使用-L,它会检查文件的属性- 内容或元数据,而不是链接的属性。例如,如果您使用-atime,它将检查atime文件的 ,而不是链接:

$ find testdir/ -name link -newer testdir/ref
testdir/link
$ find -L testdir/ -name link -newer testdir/ref
$
Run Code Online (Sandbox Code Playgroud)

testdir/link是在 之后创建的testdir/ref,但它指向的文件不是。