【问题标题】:How do I get the dates of files in my output from a grep search?如何从 grep 搜索中获取输出中文件的日期?
【发布时间】:2020-10-22 05:16:16
【问题描述】:

我可以在所有文件中搜索特定字符串并在 txt 文档中毫无问题地输出。我似乎无法弄清楚如何在输出结果中捕获文件的日期。

grep -rnw '/my_path/' -e 'search_string' > list.txt

这适用于查找文件,但是当我尝试通过管道传输任何其他命令(如 stat、date 或 ls)时,我似乎无法获取文件的日期以输出文件名。

grep -rnw '/my_path/' -e 'search_string' | stat -c %n':'%z > list.txt

这似乎无法在我的输出中获取文件的日期。

【问题讨论】:

  • 输出应该是什么样子的?
  • 您不必(或实际上不应该)更新问题以包含解决方案;解决方案存在于单独的答案中,您应该接受和/或投票而不是编辑问题。

标签: file date grep timestamp output


【解决方案1】:

问题在于grep 输出的是与您的字符串匹配的行,而不是文件名,因此在您的第二个示例中,您尝试在字符串而不是文件上调用stat

You should add a -l parameter 到您的grep 命令,以便不输出匹配的行,而是输出包含它的文件。试试这个:

grep -lrnw '/my_path/' -e 'search_string' | stat -c %n':'%z > list.txt

[编辑] 无论如何,这是行不通的,因为stat 命令不接受来自管道的输入。那么解决办法就是

stat -c %n':'%z $(grep -lrnw '/my_path/' -e 'search_string') > list.txt

【讨论】:

  • 好的!解决方案与您的版本一起使用。 grep -lrnw '/path/' -e '字符串' | xargs stat -c %n':'%z > file.txt
【解决方案2】:

这是一个使用find -exec 的解决方案,可以避免未引用的扩展:

find /my_path \
    -type f \
    -exec grep -qw 'search_string' {} \; \
    -exec stat -c '%n:%z' {} +

在哪里

  • type f – 只看文件
  • -exec grep -qw 'search_string' {} \; - 仅将包含单词 search_string 的文件传递给下一个命令
  • -exec stat -c '%n:%z' {} + – 对找到的文件尽可能少地运行 stat

【讨论】:

  • 感谢您对替代 find 命令的帮助。我希望他们两个都拥有,这很有效。它们在我的测试中都运行了相同的时间 - 但现在我有两种修改方法。
猜你喜欢
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 2012-11-05
  • 1970-01-01
相关资源
最近更新 更多