用-L查找用法


34

我有

link -> file

我做

find -L . -name 'link'

并得到

./link

这是为什么?

找人说:

-L:跟随符号链接。当find检查或打印有关文件的信息时,所使用的信息应从链接指向的文件的属性中获取,而不是从链接本身获取(除非它是断开的符号链接,或者find无法检查文件)链接指向的位置)。

Answers:


12

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

$ find testdir/ -name link -newer testdir/ref
testdir/link
$ find -L testdir/ -name link -newer testdir/ref
$

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


1
您能解释一下我的榜样吗?我了解的是:在我的示例中,查找开始了搜索。它遇到./link,因为-L实际上是取消引用它并采用./file的属性。它将./file的名称与模式“ link”进行比较,由于不匹配,因此不应报告任何o / p。我的推理怎么了?
Ankur Agarwal '02

在您引用的查找手册中,“使用的信息应取自链接所指向的文件的属性。” 文件的名称不是其属性之一,因此它仍使用链接的名称。这也比真实文件的名称有用得多。
凯文

“文件名不是其属性之一”,我不知道。文件的其他任何此类属性均不视为属性?老实说,我仍然持怀疑态度,会等别人怎么说。
Ankur Agarwal '02

与@abc一样,不知道文件名不是文件属性。在任何文档和/或手册页中哪里可以找到此信息?请参考我可以在其中了解更多有关文件属性的信息。
小丑

34

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

find命令的正常活动是对目录条目进行操作,因此默认情况下不跟随符号链接。添加-L原因find后,所有属性遵循符号链接,目录搜索时不能忽略的属性即名称。的目的之一find -name是为诸如,mvrm等操作目录条目的命令提供输入。如果find -L dir -name产生的名称指向以root为根的目录树之外,将产生令人不愉快的结果dir


哇!为什么这个精妙的概念在手册页上没有很好地说明(除非我错过了)?这对我来说是一个很大的惊喜。
Ankur Agarwal'2

2
@Kyle Jones There would be unpleasant and surprising results if 发现-L dir -name`可能会产生指向以dir为根的目录树之外的名称 find dir -name pattern。因为添加-L允许指向外部目录
timotheecour

那么如何 cp -R在符号链接下复制内容呢?
javadba
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.