首页 > 解决方案 > MacOS终端中按文件创建日期降序对grep输出进行排序的命令是什么?

问题描述

我想递归地查找目录中包含字符串“aloha”的所有文件。我将使用 grep 命令来执行此操作,输出将是文件路径列表。我想按它们的创建日期(降序)对它们进行排序。我知道在 MacOS 上,内核实际上存储文件创建日期,这与其他系统不同,所以我知道这是可能的,但我就是想不通。

grep -iRl  "aloha" dir/ | sort -k1 -n
grep -iRl  "aloha" dir/ | ls -U
grep -iRl  "aloha" dir/ |  xargs stat -f '%c %N'|sort

鉴于以下文件位于目录 dir 中:

file1.txt - created on 1/2/2019
file2.txt - created on 1/3/2019

命令的输出应该是:

file2.txt
file1.txt

标签: bashmacosunixterminalgrep

解决方案


ls -Ut可以做到这一点。但是ls不会从标准输入中获取文件名,因此您不能将输出直接通过管道传递给它。它要求文件名是命令行参数,因此您可以使用xargs将标准输入转换为参数。

grep -iRl "aloha" dir | xargs ls -Ut

但是,如果任何文件名在其名称中包含空格,这将无法正常工作。使用该--null选项grep使其在每个文件名之后输出一个空字节,并使用 -0 option toxargs` 使其将其用作文件名之间的分隔符。

grep -iRl --null "aloha" dir | xargs -0 ls -Ut

推荐阅读