【问题标题】:Why does GNU Find care about a trailing slash in this situation?为什么 GNU Find 在这种情况下关心斜杠?
【发布时间】:2020-05-18 21:29:20
【问题描述】:

给定:

  • 我正在运行 GNU/Linux
  • 我在/path/to/repos 中有一些 Git 存储库。
  • 我想检查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/

为什么会有这种差异?

【问题讨论】:

    标签: unix find gnu gnu-coreutils


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多