查找上次修改的文件以匹配目录中的简单通配符正则表达式

时间:2015-10-15 18:02:55

标签: regex bash grep find

我在linux环境中工作,我需要找到最后一个修改过的文件来匹配一个简单的正则表达式。例如:

testname_20150328.csv #Last modified 2015-05-12
testname_20150501.csv #Last modified 2015-05-01
testname_20140328.csv #Last modified 2014-03-28
notamatch.csv
alsonotamatch.csv

因此,这种情况下的模式将是" testname _ *。csv"。我忽略了通配符的值,只是从文件夹中提取最后一个修改过的文件。我希望我的请求的输出类似于

./testname_20150328.csv

我遇到的主要问题是我一直在运行像

这样的命令
ls -p -t . | grep -v / | head -1

它给了我最后修改过的文件,但没有根据正则表达式过滤掉文件,或

find -name "testname_*.csv"

匹配正则表达式,但不让我获得有关上次修改时间的详细信息。关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:0)

科斯塔斯发布了答案,我太盲目了,

ls -p -t testname_*.csv | head -1

这正是我所需要的。

答案 1 :(得分:0)

适用于任何合法文件名的解决方案,包括那些包含换行符的解决方案(排除解析ls的输出):

max_mod_time=0
for f in testname_*.csv; do
    last_mod_time=$(stat -c %Y "$f")
    [ "$last_mod_time" -gt "$max_mod_time" ] || continue

    last_mod_time=$max_mod_time
    last_mod=$f
done

stat的确切调用可能会有所不同(显示为GNU stat),因为POSIX规范未涵盖此内容。