在bash中使用/home/zzz
和/home/zzz/
之间的区别是什么?
我刚发现当/home/zzz
是指向另一个目录的链接时,find /home/zzz -type f
将无法获得任何内容,但find /home/zzz/ -type f
将返回该目录下的所有文件。我认为bash会将/home/zzz
视为链接类型文件,但在这种情况下/home/zzz/
为dir。
还有其他差异吗?
答案 0 :(得分:3)
大多数Unix实用程序(在本例中为find
)解释尾部斜杠表示“遵循符号链接”。
来自POSIX Symbolic Link Specification:
当路径名的最后一个组件是符号链接时, 标准要求尾部斜杠导致链接 紧随其后。这是历史实现的行为。对于 例如,对于 / a / b 和 / a / b / ,如果 / a / b 是指向a的符号链接 目录,然后 / a / b 是指符号链接, / a / b / 是指 符号链接指向的目录。
答案 1 :(得分:1)
它不是bash,它的 find 将符号链接视为符号链接并从其自身读取属性,而不是从它指向的文件中读取属性。看看find(1)说的是什么,
切勿关注符号链接。 这是默认行为。当find查看或打印文件信息,并且文件是符号链接时,所使用的信息应取自符号链接本身的属性。
要将其视为目录,您需要使用-L
选项。
当-L选项生效时,-type谓词将始终与符号链接指向的文件类型匹配,而不是链接本身(除非符号链接断开)。使用-L会导致-lname和-ilname谓词始终返回false。
我的猜测是当你传递一个尾部斜杠/
bash试图解析它并找到它看作一个目录。如果您确定目录树中没有递归符号链接,则可以使用find
选项调用-L
。所以跟随命令应该有效。
find -L /home/zzz -type f