unix - 为什么 GNU Find 在这种情况下关心斜杠?
问题描述
鉴于:
- 我正在运行 GNU/Linux
- 我有一些 Git 存储库在
/path/to/repos
. - 我想检查
myrepo
存储库中的任何文件是否在特定时间后被修改。 find /path/to/repos/myrepo -type l
不打印任何结果,表明myrepo
的目录结构不包含符号链接。- 该目录
/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' -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/
。
为什么会有这种差异?
解决方案
GNU Find 保留输入的起始点,因此在第一个示例中,/path/to/repos/myrepo
不匹配-path '/path/to/repos/myrepo/*'
,因为路径表达式包含尾部斜杠并且目录名称中没有尾部斜杠。
在第二个示例中,由于目录名称确实包含尾部斜杠,因此它成功匹配路径表达式/path/to/repos/myrepo/*
。
测试在-newermt
这里无关紧要。请注意,find
这些示例中处理的其他路径是相同的,无论起点是否包含尾部斜杠。即,如果myrepo
包含一个文件xyz
,则/path/to/repos/myrepo/xyz
在这两种情况下都会对其进行处理。换句话说,对于起点的子路径,如果需要,尾部斜杠会附加到起点;这不适用于起点本身。
推荐阅读
- c# - Windows Server 2012 HttpWebRequest 连接关闭错误
- javascript - 单击后退箭头在 JavaScript 中无法正常工作
- c# - 如何强制为空值调用 JsonConverter.WriteJson()
- javascript - 浏览器弹出窗口未在 selenium 中关闭
- excel - 具有多个输入的特定文本词的搜索选项 [=IF(ISNUMBER(SEARCH("apple",A1)),"Y"," ")]
- java - Appium 无法启动新会话
- powershell-3.0 - 每次出现@时在Powershell中拆分字符串并保存子字符串
- javascript - 泛化函数以重用不同的元素
- php - 使用 curl 从 mailchip 获取数据我在哪里将 api 密钥放在 curl 调用中
- java - 格式标志转换不匹配异常