六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 40|回复: 0

在Linux下找出多个文件中最新的那个文件

[复制链接]

升级  79.6%

288

主题

288

主题

288

主题

进士

Rank: 4

积分
898
 楼主| 发表于 2013-2-4 13:35:01 | 显示全部楼层 |阅读模式
问:在Linux下怎么找出多个文件(比如*.cpp)中最新的那个文件?
 
答:可以采用如下命令形式
(1)将文件按从新到旧排列,取第一个。
ls -t *.cpp | head -1
(2)将文件按从旧到新排列,取最后一个。
ls -rt *.cpp | tail -1

执行示例:
[root@jfht synway]# ls -lrt *.cpp
-rw-r--r-- 1 root root   246 2007-09-12 ch_set.cpp
-rw-r--r-- 1 root root 10073 2008-11-04 ssv_codec.cpp
-rw-r--r-- 1 root root  2199 2008-11-04 main.cpp
-rw-r--r-- 1 root root   600 2008-11-04 config.cpp
-rw-r--r-- 1 root root  2533 2008-11-07 syn_thread.cpp
-rw-r--r-- 1 root root   998 2008-11-07 ssv_server.cpp
-rw-r--r-- 1 root root  5301 2008-11-07 ctsc_session.cpp
-rw-r--r-- 1 root root  9692 2008-11-07 ctmc_session.cpp
-rw-r--r-- 1 root root 83121 2010-06-30 ch_info.cpp
从上面的输出来看,显然ch_info.cpp是最新的。
[root@jfht synway]# ls -t *.cpp | head -1
ch_info.cpp
[root@jfht synway]# ls -rt *.cpp | tail -1
ch_info.cpp
[root@jfht synway]#
编写成脚本执行,如下所示:
[root@jfht synway]# vi newest_file.sh
#!/bin/sh

newest_file_of()
{
        ls -t "$@" | head -1
}

echo "newest file of *.cpp is $(newest_file_of *.cpp)"

[root@jfht synway]# ./newest_file.sh  
newest file of *.cpp is ch_info.cpp
[root@jfht synway]#
 
 
上述命令的详细解释:
 
ls -t
按修改时间排序,较新的文件排在前面(sort by modification time),也就是按照从新到旧排序。如果要按照从旧到新排序,则需要增加-r参数(逆序)。
<div class="quote_title">man ls 写道
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表