使用ls筛选某一天的文件

使用ls筛选某一天的文件

ls命令,即便是对于程序开发人员,也可以说是使用频率最高的一个命令了。但是,在很多人的印象中,ls命令仅仅是用来查看目录与文件的命令而已。如果要说筛选文件,你的第一反应可能是:find命令。但也许,它并不能满足你的需求。
先来说说,启发我使用ls命令筛选文件的应用场景吧:

[afe:/home/afe/corpftp/NJ000066/bkzipfile]>ls|wc -l
4768
[afe:/home/afe/corpftp/NJ000066/bkzipfile]>l|head -9
总用量 3985504
-rw-r----- 1 afe    afe      174984 61 2016 CXQQP100H1013601020010000A8YHYH00023420160506000002.zip
-rw-r----- 1 afe    afe      178451 61 2016 CXQQP100H1013601020010000A8YHYH00023420160506000003.zip
-rw-r----- 1 afe    afe      186625 61 2016 CXQQP100H1013601020010000A8YHYH00023420160507000001.zip
-rw-r----- 1 afe    afe      175124 61 2016 CXQQP100H1013601020010000A8YHYH00023420160509000001.zip
-rw-r----- 1 afe    afe      181216 61 2016 CXQQP100H1013601020010000A8YHYH00023420160509000002.zip
-rw-r----- 1 afe    afe      175539 61 2016 CXQQP100H1013601020010000A8YHYH00023420160509000003.zip
-rw-r----- 1 afe    afe      182295 61 2016 CXQQP100H1013601020010000A8YHYH00023420160510000002.zip
-rw-r----- 1 afe    afe      197808 61 2016 CXQQP100H1013601020010000A8YHYH00023420160510000003.zip

在上面的例子中,目录中共计有4768个文件,每天的文件个数是不确定的,可能是几个、几十个或者上百个。刚好,你需要确定某一天的文件个数呢?你会怎么办呢?

使用find命令是满足需求的,因为find命令的时间筛选都是基于范围的,你只能用它查找以当前时间为起点,若干个小时之内(之外),或者若干天之内(之外)的文件。而需要精确查找某一天的文件,它是无法达到要求的。

[afe:/home/afe/corpftp/NJ000066/bkzipfile]>find . -type f -mtime -2 -exec ls -lt {} \;
# 不难发现,基于find命令的输出,无法精确筛选某一天的文件
-rw-r--r-- 1 afeftp afeftp 580066 5月   2 08:34 ./KZQQP100H1013601020010000A8YHYH00023420170502000007.zip?
-rw-r--r-- 1 afeftp afeftp 710885 5月   2 08:24 ./KZQQP100H1013601020010000A8YHYH00023420170502000008.zip?
-rw-r--r-- 1 afeftp afeftp 182472 4月  30 11:04 ./CXQQP100H1013601020010000A8YHYH00023420170430000002.zip?
-rw-r--r-- 1 afeftp afeftp 1738260 5月   2 08:34 ./KZQQP100H1013601020010000A8YHYH00023420170502000009.zip?
-rw-r--r-- 1 afeftp afeftp 343480 5月   2 08:24 ./KZQQP100H1013601020010000A8YHYH00023420170427000045.zip?
-rw-r--r-- 1 afeftp afeftp 222953 5月   2 09:14 ./CXQQP100H1013601020010000A8YHYH00023420170502000026.zip?
-rw-r--r-- 1 afeftp afeftp 180948 5月   2 08:04 ./CXQQP100H1013601020010000A8YHYH00023420170502000002.zip?

也许我们可以结合ls、stat、awk、grep命令,就像下面这样:

[afe:/home/afe/corpftp/NJ000066/bkzipfile]>ls|xargs stat |grep Modify|awk '{print $2}'|grep 2017-05-01|wc -l
4

# 下面是截取ls -lt的部分输出,便于对比上述命令统计结果是否与实际相符
-rw-r--r-- 1 afeftp afeftp   345321 4月  30 20:54 KZQQP100H1013601020010000A8YHYH00023420170430000004.zip?
-rw-r--r-- 1 afeftp afeftp   177206 5月   1 09:04 CXQQP100H1013601020010000A8YHYH00023420170501000001.zip?
-rw-r--r-- 1 afeftp afeftp   195418 5月   1 14:04 CXQQP100H1013601020010000A8YHYH00023420170501000002.zip?
-rw-r--r-- 1 afeftp afeftp   179600 5月   1 17:04 CXQQP100H1013601020010000A8YHYH00023420170501000005.zip?
-rw-r--r-- 1 afeftp afeftp   175210 5月   1 18:04 CXQQP100H1013601020010000A8YHYH00023420170501000006.zip?
-rw-r--r-- 1 afeftp afeftp   178690 5月   2 07:04 CXQQP100H1013601020010000A8YHYH00023420170502000001.zip?

对比上面的输出,应该说组合命令达到了我们的预期要求。但是,有没更简单的方法呢?答案就是:ls -lt –time-style=long-iso,输出如下:

[afe:/home/afe/corpftp/NJ000066/bkzipfile]>ls -l --time-style=long-iso
# 以下是部分输出
-rw-r--r-- 1 afeftp afeftp  1041525 2017-04-29 13:00 KZQQP100H1013601020010000A8YHYH00023420170428000125.zip?
-rw-r--r-- 1 afeftp afeftp   347335 2017-04-29 13:00 KZQQP100H1013601020010000A8YHYH00023420170428000135.zip?
-rw-r--r-- 1 afeftp afeftp   345547 2017-04-30 20:54 KZQQP100H1013601020010000A8YHYH00023420170430000003.zip?
-rw-r--r-- 1 afeftp afeftp   345321 2017-04-30 20:54 KZQQP100H1013601020010000A8YHYH00023420170430000004.zip?
-rw-r--r-- 1 afeftp afeftp  1158377 2017-05-02 08:34 KZQQP100H1013601020010000A8YHYH00023420170502000003.zip?
-rw-r--r-- 1 afeftp afeftp  1544723 2017-05-02 08:14 KZQQP100H1013601020010000A8YHYH00023420170502000004.zip?

不难得出,更简单的搜索命令:

[afe:/home/afe/corpftp/NJ000066/bkzipfile]>ls -l --time-style=long-iso|grep 2017-05-01|wc -l
4

ok,输出一致,目标达成。

你可能感兴趣的:(linux)