如何按上次修改时间的顺序递归grep?

如何按上次修改时间的顺序递归grep?

grep -r 对特定目录中的所有文件进行递归搜索。但是,如果我希望 grep 按上次修改时间的顺序读取这些文件,我该怎么做?

答案1

zsh

grep -- foo **/*(D.om)

使用 GNU 工具:

find . -type f -printf '%T@\t%p\0' |
  tr '\n\0' '\0\n' |
  sort -rg |
  cut -f2- |
  tr '\n\0' '\0\n' |
  xargs -r0 grep foo

答案2

如果你没有类似的东西zsh,这并不完全是微不足道的。获取命中数,然后按命中的每个文件的修改时间进行排序可能会更有效。

grep -rl 'regex' . |
while read -r file; do
    stat -c '%Y:%n' "$file"
done | sort | cut -d: -f2-

如果您的文件名中带有换行符或其他内容,这显然会破坏。

相关内容