给定:
- 我正在运行 GNU/Linux
- 我在
/path/to/repos
中有一些 Git 存储库。 - 我想检查
myrepo
存储库中的任何文件是否在特定时间后被修改。 find/path/to/repos/myrepo -type l
不打印任何结果,表明myrepo
的目录结构不包含符号链接(symbolic link)。- 目录
/path/to/repos/myrepo/.git
的修改时间比我感兴趣的更新,但myrepo
中没有其他文件> 或其任何子目录都是如此。
当我输入以下命令时,我没有看到任何结果:
find/path/to/repos/myrepo -name .git -prune -o -path '/path/to/repos/myrepo/*' -newermt '2020-05-18 15:52:34 '-打印
然而,当我在起点添加尾部斜杠时,
find/path/to/repos/myrepo/-name .git -prune -o -path '/path/to/repos/myrepo/*' -newermt '2020-05-18 15:52: 34'-打印
该命令打印 /path/to/repos/myrepo/
。
为什么会出现这种差异?
最佳答案
GNU Find 保留输入的起点,因此在第一个示例中,/path/to/repos/myrepo
与 -path '/path/to/repos 不匹配/myrepo/*'
因为路径表达式包含尾部斜杠,而目录名称中没有尾部斜杠。
在第二个示例中,由于目录名称确实包含尾部斜杠,因此它成功匹配路径表达式 /path/to/repos/myrepo/*
。
-newermt
测试在这里无关紧要。请注意,这些示例中 find
处理的其他路径是相同的,无论起始点是否包含尾部斜杠。即,如果 myrepo
包含文件 xyz
,则在两种情况下都会将其处理为 /path/to/repos/myrepo/xyz
。换句话说,对于起点的子路径,如果需要,会在起点后面附加一个尾部斜杠;这不适用于起点本身。
关于unix - 为什么 GNU Find 在这种情况下关心尾部斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61879303/