我在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"
匹配正则表达式,但不让我获得有关上次修改时间的详细信息。关于如何做到这一点的任何想法?
答案 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规范未涵盖此内容。