我可以使用以下命令,将某个目录中的Python文件按照最近更新时间排序:
```ls -lt *.py```
```ls -lt *.py```
ls -lt *.py
但我该如何按照那个顺序使用grep搜索这些文件呢?
我知道应该避免尝试解析ls
的输出,因为那是非常危险的。
ls -lt *.py
但我该如何按照那个顺序使用grep搜索这些文件呢?
我知道应该避免尝试解析ls
的输出,因为那是非常危险的。
gnu
工具实现这一目标:find . -maxdepth 1 -name '*.py' -printf '%T@:%p\0' |
sort -z -t : -rnk1 |
cut -z -d : -f2- |
xargs -0 grep 'pattern'
这将处理具有特殊字符(如空格、换行符、通配符等)的文件名。
find
命令在当前目录中查找所有 *.py
文件,并打印修改时间(epoch 值) + 冒号 + 文件名 + NUL 字节。sort
命令在第一列(即时间戳)上执行反向数值排序。cut
命令从输出中删除第一列(时间戳)。xargs -0 grep
命令在每个文件中搜索 pattern
。如果你想按时间顺序获取包含特定模式的文件列表,有一个非常简单的方法:
grep -sil <searchpattern> <files-to-grep> | xargs ls -ltr
eval "sorted=($(ls -t --quoting-style=shell-escape *.py))"; grep foo "${sorted[@]}"
怎么样? - Simd--quoting-style=shell-escape
是避免解析问题的官方方式。 - Simdgrep
。 - anubhava--quoting-style=c
也可以使用,并且更短一些。 - anubhava