Linux unix文件按日期搜索,从最近创建到最近创建
在文件夹Linux unix文件按日期搜索,从最近创建到最近创建,linux,unix,grep,Linux,Unix,Grep,在文件夹a时间下午6点,我用文本abc创建文件6 在文件夹a/b时间晚上7点,我创建了带有文本abc的文件7 在文件夹a时间晚上8点,我用文本abc创建文件8 在文件夹a中,我想搜索所有文本为abc的文件,按最近创建的文件到最近创建的文件排序。我通过ls-hlt | grep-irabc*搜索我的结果是 6:abc 8:abc b/7:abc 但是我想要下面的。我该怎么做 8:abc b:\7:abc 6:abc 更新:ls-lt | grep-irabc*可以很好地使用abc返回文件,从最
a
时间下午6点,我用文本abc创建文件6
在文件夹a/b
时间晚上7点,我创建了带有文本abc的文件7
在文件夹a
时间晚上8点,我用文本abc创建文件8
在文件夹a中,我想搜索所有文本为abc的文件,按最近创建的文件到最近创建的文件排序。我通过ls-hlt | grep-irabc*
搜索我的结果是
6:abc
8:abc
b/7:abc
但是我想要下面的。我该怎么做
8:abc
b:\7:abc
6:abc
更新:
ls-lt | grep-irabc*
可以很好地使用abc返回文件,从最旧到最新,其中“ls-lt”显示从新到旧的文件。不知道为什么grep会干扰流量,我想这是你想要的。
它将显示带有“abc”字样的文件。最新的第一
ls -Rt1 | grep "*abc*"
大问题被分解成小问题
- 查找包含“abc”的所有文件,忽略案例
- 打印每个文件名及其自创建以来的时间
- 按日期对filanames列表进行排序
- 从保留文件名的列表中删除创建日期
grep -irl ABC . |
xargs -d$'\n' -n1 sh -c 'printf "%s\t%s\n" "$(stat -c "%W" "$1")" "$1"' -- |
sort -n -k1 |
cut -f2-
使用测试(注意stat-c“%Y”
vsstat-c“%W”
):
关于:
解析诸如
ls
或find
之类的命令时存在一般性问题。这是因为当文件名具有特殊字符时,它们会变得非常有趣。你可以阅读更多关于这个和
最常用的方法是创建一个文件列表,其中文件名由空字符(\0)
分隔。GNU grep可以使用-Z
标志创建这样的列表:
-Z,--null
:输出一个零字节(ASCII NUL字符),而不是通常在文件名后面的字符。例如,grep-lZ
在每个文件名后输出一个零字节,而不是通常的换行符。此选项使输出明确无误,即使文件名包含不寻常的字符,如换行符。此选项可与find-print0
、perl-0
、sort-z
、和xargs-0
等命令一起使用,以处理任意文件名,即使是包含换行符的文件名
来源:man grep
我们现在可以在OP的问题中使用它:
$ grep -lZR "abc" a/
将为我们提供一个空分隔的文件列表,这些文件现在可以存储在一个数组中以供进一步处理(请参阅)
unset a i
而IFS=read-r-d$'\0'文件;做
[i++]=“$file”#或您希望处理每个文件的方式
完成<大多数linuxs文件系统通常不保留创建文件名的时间。那么您如何从上次修改到按该顺序获得预期的文件列表?我不理解b:\7:abc
输出,\7
从何而来?那不是b/7:abc
?Och,文件夹分隔符是\吗?或者文件名是按字面意思命名的b:\7
(4个字符)?或者你混合使用了/
作为文件夹分隔符?这是个错误。是正斜杠,不是反斜杠@KamilCukSomething不清楚,您想按修改时间排序,还是您在示例中给出的时间是文件名的一部分(文件名7表示文件创建时间为7pm),我得到错误,没有这样的命令,例如ls-Rt1
Rt1似乎无效。请分别尝试这些命令以查看是谁出错ls-R ls-t ls-1请注意,除非您使用的是记录创建时间的文件系统stat-c“%W”
将报告0作为创建时间。
./a/6
./a/b/7
./a/8
$ grep -lZR "abc" a/
$ ls -lrt "${a[@]}"