And*_*rks 1 grep bash find xargs macos
我有一个包含多个文件的目录。我只需要知道包含特定字符串的最新文件的完整路径。
这需要在 macOS 上运行,并且目录路径包含空格。
我需要能够调用这个 bash 命令,而不必先cd进入该目录。
注意:我在这里看到了类似的问题,但它们只是检查目录中的最新文件是否包含该字符串。这意味着如果目录中第二个最近的文件包含我正在查找的字符串,它将失败。
我苦苦挣扎的部分原因是,当目录中有空格时,事情就会崩溃,并且弄清楚如何引用路径对于xargs. 使用find -exec不起作用,因为没有find标志可以按上次修改的顺序返回结果。
说明: 文件的内容需要包含字符串,而不是文件名。我希望使用 bash,因为这是其他 bash 脚本的一部分,并且我也很想了解如何在 bash 中执行此操作。
如果要在文件名中找到该字符串:
print -rC1 -- the/directory/**/*string*(Nom[1])
Run Code Online (Sandbox Code Playgroud)
如果内容中有:
for f (the/directory/**/*(N.om)) grep -l -- string $f && break
Run Code Online (Sandbox Code Playgroud)
(假设 zsh shell 应该是 macos 上的默认交互式 shell,而不是 bash,bash 在 macos 上是一个古老的版本,并且无论如何都没有 glob 限定符)。
对于ullglob ,globom 限定符 按修改时间(从最新到最旧)o对 glob 扩展进行排序,仅限于常规文件。如果您需要这些文件的绝对路径,请添加。m.NN:P
有关详细信息,请参阅info zsh qualifiers(或在线查看最新版本的 zsh)。
在 bash、sh 或其他 shell 中,您始终可以执行以下操作:
zsh -c 'any of those codes above'
Run Code Online (Sandbox Code Playgroud)