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

问:在Linux下怎么找出多个文件(比如*.cpp)中最新的那个文件?

答:可以采用如下命令形式

(1)将文件按从新到旧排列,取第一个。

ls -t *.cpp | head -1

(2)将文件按从旧到新排列,取最后一个。

ls -rt *.cpp | tail -1

执行示例:

[root@jfht synway]# ls -lrt *.cpp

-rw-r--r--1rootroot2462007-09-12ch_set.cpp

-rw-r--r--1rootroot100732008-11-04ssv_codec.cpp

-rw-r--r--1rootroot21992008-11-04main.cpp

-rw-r--r--1rootroot6002008-11-04config.cpp

-rw-r--r--1rootroot25332008-11-07syn_thread.cpp

-rw-r--r--1rootroot9982008-11-07ssv_server.cpp

-rw-r--r--1rootroot53012008-11-07ctsc_session.cpp

-rw-r--r--1rootroot96922008-11-07ctmc_session.cpp

-rw-r--r-- 1 root root 83121 2010-06-30 ch_info.cpp

从上面的输出来看,显然ch_info.cpp是最新的。

[root@jfhtsynway]#ls-t*.cpp|head-1

ch_info.cpp

[root@jfhtsynway]#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"newestfileof*.cppis$(newest_file_of*.cpp)"

[root@jfhtsynway]#./newest_file.sh

newestfileof*.cppisch_info.cpp

[root@jfht synway]#

上述命令的详细解释:

ls -t

按修改时间排序,较新的文件排在前面(sort by modification time),也就是按照从新到旧排序。如果要按照从旧到新排序,则需要增加-r参数(逆序)。

man ls 写道
-l     use a long listing format

-r,--reverse

reverseorderwhilesorting

-t   sort by modification time
 

head -1

取第一行。也可以写作:head -n 1。

man head 写道
-n, --lines=[-]N     print the first N lines instead of the first 10; with the leading ‘-’, print all but the last N lines of each file
 

tail -1

取最后一行。也可以写作:tail -n 1。

man tail 写道
-n, --lines=N     output the last N lines, instead of the last 10
 

相关推荐