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-
如果您的文件名中带有换行符或其他内容,这显然会破坏。