find 显示双正斜杠可以吗?

find 显示双正斜杠可以吗?

这是一个错误吗,当我find ./path/here/得到:

./path/here//foo
./path/here//bar

我知道find希望我指定不带尾部斜杠的路径,但它肯定可以检测制表符完成留给我的路径并相应地调整其输出。有什么理由不这样做吗?

答案1

从技术上讲,这是一个错误,因为POSIX 状态

层次结构中遇到的其他文件的所有路径名应由当前路径操作数的串联组成,<slash>如果当前路径操作数不以 1 结尾,以及相对于路径操作数的文件名

双斜杠没有任何区别,因此./path/here//foo./path/here/foo始终是同一个文件。 (如果双斜杠位于某些 Unix 变体的路径开头,那么它确实会有所不同。如果您的双斜杠确实如此,那么希望find特别对待这种情况。)

答案2

根据记录,人们可能使用find some/dir/而不是的原因之一find some/dir是,何时some/dir实际上是一个目录的符号链接,并且您确实希望find在该符号链接指向的目录中查找文件。

但是,在这种情况下,有更好的选择:

find -H some/dir

-H是一些 POSIX 实用程序(lscpchmod...)支持的选项,它告诉实用程序遵循作为参数传递的符号链接(只是那些,不要与-L/混淆-follow,这会导致find遵循每一个符号链接,作为参数传递的符号链接,以及在目录遍历期间找到的符号链接)。

这在功能上仍然不等同于实际上不是目录的find some/dir/情况。some/dir在这种情况下,find some/dir/将会失败不是目录错误同时find -H some/dir会列出该非目录文件。

相关内容