我有
link -> file
我愿意
find -L . -name 'link'
并得到
./link
这是为什么?
男人发现 说:
-L :遵循符号链接。当 find 检查或打印有关文件的信息时,所使用的信息应从链接指向的文件的属性中获取,而不是从链接本身获取(除非它是损坏的符号链接或 find 无法检查该文件链接指向的位置)。
答案1
一般规则是,如果命令对链接(即目录条目,指向 inode 的指针)进行操作,则该命令将符号链接视为其本身,而不是链接指向的对象。否则,该命令将对符号链接指向的内容进行操作。因此,cp
默认情况下遵循符号链接并复制链接指向的文件的内容。但是,当您要求cp
通过指定来处理目录条目时-R
,它会停止遵循符号链接。 mv
始终与目录条目一起使用,因此它从不遵循符号链接。
该find
命令的正常活动是对目录条目进行操作,因此默认情况下不遵循符号链接。添加-L
原因find
以跟踪所有属性的符号链接除了进行目录搜索时不能忽略的一个,就是名称。的目的之一find -name
是为诸如mv
和 之类的命令提供输入rm
,这些命令对目录条目进行操作。如果find -L dir -name
产生的名称指向以 为根的目录树之外,将会产生令人不快和令人惊讶的结果dir
。
答案2
使用-L
,它检查特性文件的内容或元数据,而不是链接的内容或元数据。例如,如果您使用-atime
,它将检查atime
文件的 ,而不是链接:
$ find testdir/ -name link -newer testdir/ref
testdir/link
$ find -L testdir/ -name link -newer testdir/ref
$
testdir/link
是在 后创建的testdir/ref
,但它指向的文件不是。