我在用bash。
假设我有一个日志文件目录/var/myprogram/logs/
。
在这个目录下,我有许多子目录和子目录,其中包括来自我的程序的不同类型的日志文件。
我想在2010
下找到三个最新的文件(最近修改过的),它们的名称以/var/myprogram/logs/
开头,而不考虑子目录,并将它们复制到我的主目录。
这是我手动操作的方法
一。浏览每个目录并执行ls -lt 2010*
查看最近修改了哪些以2010
开头的文件。
2.一旦我浏览了所有目录,我就会知道哪三个文件是最新的。所以我手动将它们复制到我的主目录。
这是相当乏味的,所以我想知道我是否可以用某种方式将一些命令组合在一起,一步完成这项工作,最好不使用shell脚本?
我一直在研究我可能可以使用的find
、ls
、head
和awk
,但还没有找到将它们粘合在一起的正确方法。
如果我需要澄清,请告诉我。谢谢。
最佳答案
你可以这样做:
find -type f -name '2010*' -printf "%C@\t%P\n" |sort -r -k1,1 |head -3 |cut -f 2-
这将输出一个文件列表,其前缀为上一个更改时间,根据该值对其进行排序,取前3个并删除时间戳。