unix - 为什么 GNU Find 在这种情况下关心尾部斜杠?

标签 unix find gnu gnu-coreutils

给定:

  • 我正在运行 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/

相关文章:

macos - 如何根据文件大小(包括在子目录中)进行 unix 查找?

node.js - 如何将元数据添加到 mac/linux 上的文件夹

ansible - 如何在ansible中仅发送文件路径?

linux - 找到 *.tar 然后提取并删除文件

c - 这个构造是什么意思 "__builtin_expect(!!(x), 1)"

shell - 查找具有特定权限的文件

bash - Shell 脚本将文件内容与字符串进行比较

bash - Awk/Find/Grep - 如果文件中存在 $3

c++ - 如何在 Google App Engine Python 2.7 运行时模拟 GNU C 库 drem/remainder 函数?

gcc - 如何使用 gcc 工具链强制二进制文件中的函数顺序?