我有
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
是为像mv
和rm
这样的命令提供输入,这些命令对目录条目进行操作。如果find -L dir -name
可以生成指向以dir
.
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
,但它指向的文件不是。