查找最新日期和修改日期的文件并使用 sed

查找最新日期和修改日期的文件并使用 sed

我有一系列包含日期的文件,我需要获取具有最新日期的文件以及最新日期修改并将其通过管道传输到 sed。我尝试了各种方法,但似乎找不到一种有效的方法。

例如:

find . -iname '*2014-09-20*' -type f -exec ls -lrt {} \; -exec tail -1 {} \; -exec sed -n -e '/some test/,/some other text/p' {} \;

find . -iname '*2014-09-20*' -type f | xargs ls -lrt | tail -1 | sed -n -e '/some text/,/some other text/p'

日志文件看起来像这样

-rw-r--r--. 1 root root  23042 Sep 18 14:21 logfilename_2014-09-19_20140918141909.log
-rw-r--r--. 1 root root   2343 Sep 18 14:22 logfilename_2014-09-20_20140918142142.log
-rw-r--r--. 1 root root   2343 Sep 18 14:23 logfilename_2014-09-21_20140918142245.log
-rw-r--r--. 1 root root   2343 Sep 19 10:11 logfilename_2014-09-20_20140919101031.log
-rw-r--r--. 1 root root   2343 Sep 19 10:12 logfilename_2014-09-21_20140919101122.log
-rw-r--r--. 1 root root   2343 Sep 19 10:13 logfilename_2014-09-22_20140919101218.log

我期望输出是这样的:

TEXT 1

line
line
line
line

TEXT 2

当我这样做时它有效:

sed -n -e '/TEXT 1/,/TEXT 2/p' logfilename_2014-09-20_20140919101031.log

但是当我将结果从上述命令传输到 sed 时,我没有得到任何结果。这是我到目前为止所尝试过的:

find . -iname '*2014-09-19*' -type f | xargs stat --format '%Y : %y %n' | sort -nr | cut -d: -f2- | head -1 | sed -n -e '/TEXT 1/,/TEXT 2/p'

find . -iname '*2014-09-19*' -printf "%T@\t%p\n" | sort | awk -F"\t" '{print $NF}' | tail -1 | sed -n -e '/TEXT 1/,/TEXT 2/p'

答案1

最简单的方法(但如果您的文件包含空格或换行符或其他奇怪的字符,则会失败)是

ls -ltr '*2014-09-20*' | tail -n 1

更安全的方法是

find . -printf "%T@\t%p\n" | sort | awk -F"\t" '{print $NF}'

答案2

如果需要使用最近修改时间的文件,最简单的方法是使用桀骜而不是其他一些 shell 并使用它的全局限定符 om按修改时间对匹配项进行排序并[1]仅保留第一个匹配项。

echo *2014-09-20*(om[1])

如果您想要基于文件名中的时间戳部分的最新时间戳,那么通常的排序就可以了。以下函数作用于其最后一个参数:

act_on_last_file () {
  eval 'set -- "${'"$#"'}"'
  echo "$1"
}
act_on_last_file *2014-09-20*

相关内容