Linux按日期查找文件并列出在特定日期修改的文件

时间:2020-01-09 10:42:20  来源:igfitidea点击:

在UNIX和Linux系统下,如何按日期查找文件?
如何搜索在特定日期在Linux或者类似Unix的系统上创建的文件?
如何获得在特定日期在Linux或者Unix上已修改的所有文件的列表?

Linux和UNIX之类的操作系统不存储文件创建时间。
但是,您可以使用文件访问以及修改时间和日期来按日期查找文件。
例如,可以列出在特定日期已修改的所有文件。

让我们看看如何在Linux上按日期查找文件。
您需要使用NA命令和NA命令。

ls命令示例,按日期查找文件

语法如下:

ls -l  
ls -lt
ls -ltu
ls -lt /etc/ | more

您需要使用grep命令/egrep命令来过滤掉信息:

$ ls -lt /etc/ | grep filename
ls -lt /etc/ | grep 'Jun 20'

更好的建议解决方案是find命令:

find . -type f -ls |grep '2016'
find . -type f -ls |grep 'filename'
find /etc/ -type f -ls |grep '25 Sep'

find命令示例

如果许多天之前需要特定的日期范围,则可以考虑使用find命令。
在此示例中,在/data/images目录中找到在2007年1月1日至2008年1月1日之间修改的文件:

touch --date "2007-01-01" /tmp/start
touch --date "2008-01-01" /tmp/end
find /data/images -type f -newer /tmp/start -not -newer /tmp/end

您可以将列表保存到名为output.txt的文本文件中,如下所示:

find /data/images -type f -newer /tmp/start -not -newer /tmp/end > output.txt

Linux使用date命令按日期查找文件

Gnu查找各种命令行选项,以通过修改和访问日期/时间戳列出文件。

-newerXY选项命令

语法如下:

find /dir/ -type f -newerXY 'yyyy-mm-dd'
find /dir/ -type f -newerXY 'yyyy-mm-dd' -ls

字母X和Y可以是以下任何字母:

  • a文件引用的访问时间
  • B文件引用的诞生时间
  • c索引的inode状态改变时间
  • m文件参考的修改时间
  • t引用直接解释为时间

要查看当前目录中2016年9月24日修改的所有文件,请执行以下操作:

find . -type f -newermt 2016-09-24
## pass the -ls option to list files in ls -l format ##
find . -type f -newermt 2016-09-24 -ls

或者

find . -type f -newermt 2016-09-24 ! -newermt 2016-09-25
find . -type f -newermt 2016-09-24 ! -newermt 2016-09-25 -ls

输出示例:

956      4 -rw-r--r--   1 root     root          910 Sep 24 11:42 ./init.d/.depend.boot
      958      4 -rw-r--r--   1 root     root          876 Sep 24 11:42 ./init.d/.depend.start
      959      4 -rw-r--r--   1 root     root          783 Sep 24 11:42 ./init.d/.depend.stop

要查看2016年9月25日访问的所有文件:

$ find . -type f -newerat 2016-09-25 ! -newerat 2016-09-26

或者

$ find . -type f -newerat 2016-09-25 ! -newerat 2016-09-26 -ls

列出所有30天前访问的* .c文件

执行以下命令:

find /home/you -iname "*.c" -atime -30 -type f

或者

find /home/you -iname "*.c" -atime -30 -type f -ls

列出超过30天前访问的所有* .c文件

执行以下命令:

find /home/you -iname "*.c" -atime +30 -type f

或者

find /home/you -iname "*.c" -atime +30 -type f -ls

列出正好30天前访问过的所有* .c文件

执行以下命令:

find /home/you -iname "*.c" -atime 30 -type f

或者

find /home/you -iname "*.c" -atime 30 -ls