首页 > 解决方案 > 为什么 GNU Find 在这种情况下关心斜杠?

问题描述

鉴于:

当我输入以下命令时,我看不到任何结果:

find /path/to/repos/myrepo -name .git -prune -o -path '/path/to/repos/myrepo/*' -newermt '2020-05-18 15:52:34' -print

然而,当我在起点添加一个斜杠时,

find /path/to/repos/myrepo/ -name .git -prune -o -path '/path/to/repos/myrepo/*' -newermt '2020-05-18 15:52:34' -print

命令打印/path/to/repos/myrepo/

为什么会有这种差异?

标签: unixfindgnugnu-coreutils

解决方案


GNU Find 保留输入的起始点,因此在第一个示例中,/path/to/repos/myrepo不匹配-path '/path/to/repos/myrepo/*',因为路径表达式包含尾部斜杠并且目录名称中没有尾部斜杠。

在第二个示例中,由于目录名称确实包含尾部斜杠,因此它成功匹配路径表达式/path/to/repos/myrepo/*

测试在-newermt这里无关紧要。请注意,find这些示例中处理的其他路径是相同的,无论起点是否包含尾部斜杠。即,如果myrepo包含一个文件xyz,则/path/to/repos/myrepo/xyz在这两种情况下都会对其进行处理。换句话说,对于起点的子路径,如果需要,尾部斜杠会附加到起点;这不适用于起点本身。


推荐阅读