查找在日期范围之间创建的文件

时间:2013-08-20 15:38:59

标签: linux find aix

我在工作时通过telnet使用AIX,我想知道如何在日期范围之间查找特定文件夹中的文件。例如:我想查找文件夹X中在01年8月13日到31日 - 8月13日之间创建的所有文件。

观察:

  • 一旦我在服务器上的用户角色不允许我创建文件,touch技巧(你创建两个空文件以使用-newer选项)对我不起作用。
  • 我需要在特定日期之间找到,而不是在几天之间(例如:30天前创建的文件等等)

8 个答案:

答案 0 :(得分:86)

如果您使用GNU find,那么从版本4.3.3开始,您可以:

find -newerct "1 Aug 2013" ! -newerct "1 Sep 2013" -ls

它将接受GNU date -d接受的任何日期字符串。

您可以将c中的-newerct更改为aBcm中的任何一个,以便查看时间/出生/的ctime /修改时间。

另一个例子 - 2017年11月6日17:30至22:00之间修改的列表文件:

find -newermt "2017-11-06 17:30:00" ! -newermt "2017-11-06 22:00:00" -ls

man find的完整详情:

   -newerXY reference
          Compares the timestamp of the current file with reference.  The reference argument is normally the name of a file (and one of its timestamps  is  used
          for  the  comparison)  but  it may also be a string describing an absolute time.  X and Y are placeholders for other letters, and these letters select
          which time belonging to how reference is used for the comparison.

          a   The access time of the file reference
          B   The birth time of the file reference
          c   The inode status change time of reference
          m   The modification time of the file reference
          t   reference is interpreted directly as a time

          Some combinations are invalid; for example, it is invalid for X to be t.  Some combinations are not implemented on all systems; for example B  is  not
          supported on all systems.  If an invalid or unsupported combination of XY is specified, a fatal error results.  Time specifications are interpreted as
          for the argument to the -d option of GNU date.  If you try to use the birth time of a reference file, and the birth time cannot be determined, a fatal
          error  message  results.   If  you  specify a test which refers to the birth time of files being examined, this test will fail for any files where the
          birth time is unknown.

答案 1 :(得分:40)

试试这个:

find /var/tmp -mtime +2 -a -mtime -8 -ls

查找超过2天但不超过8天的文件。

答案 2 :(得分:12)

这里有一些很好的解决方案。想要分享我的,简而言之。

我正在使用find(GNU findutils)4.5.11

$ find search/path/ -newermt 20130801 \! -newermt 20130831

答案 3 :(得分:8)

您可以使用以下内容找到您需要的内容。

查找超过特定日期/时间的文件:

find ~/ -mtime $(echo $(date +%s) - $(date +%s -d"Dec 31, 2009 23:59:59") | bc -l | awk '{print $1 / 86400}' | bc -l)

或者您可以在两个日期之间找到文件。第一次约会更近,最后一次约会,更早。你可以下到第二个,你不必使用mtime。你可以随心所欲地使用它。

find . -mtime $(date +%s -d"Aug 10, 2013 23:59:59") -mtime $(date +%s -d"Aug 1, 2013 23:59:59")

答案 4 :(得分:5)

使用stat获取创建时间。您可以按字典YYYY-MM-DD HH:MM:SS格式比较时间。

这项工作在Linux上有修改时间,创建时间不受支持。在AIX上,可能不支持-c选项,但无论如何,如果没有其他工作,您应该能够使用grep来获取信息。

#! /bin/bash
from='2013-08-01 00:00:00.0000000000' # 01-Aug-13
to='2013-08-31 23:59:59.9999999999'   # 31-Aug-13

for file in * ; do
    modified=$( stat -c%y "$file" )
    if [[ $from < $modified && $modified < $to ]] ; then
        echo "$file"
    fi
done

答案 5 :(得分:2)

列出2个日期之间的文件

查找。类型的f -newermt“ 2019-01-01”! -newermt“ 2019-05-01”

查找路径-type f -newermt“ 2019-01-01”! -newermt“ 2019-05-01”

答案 6 :(得分:1)

脚本oldfiles

我试图以更完整的方式回答这个问题,最后我创建了一个完整的脚本,其中包含帮助您理解find命令的选项。

脚本oldfiles位于此repository

要“创建”新的查找命令,请使用选项-n(干运行)运行它,它将打印出您需要使用的正确find命令。

当然,如果省略它将运行的-n,则无需重新键入find命令。

用法:

$ oldfiles [-v...] ([-h|-V|-n] | {[(-a|-u) | (-m|-t) | -c] (-i | -d | -o| -y | -g) N (-\> | -\< | -\=) [-p "pat"]})

  • 选项分为以下几组:
    • 帮助&amp;信息:
        

      -h, - help:显示此帮助。
           -V, - version:显示版本。
           -v, - verbose:打开详细模式(累计)      -n, - dr-run:不要运行,只是解释如何创建“查找”命令

    • 时间类型(访问/使用,修改时间或更改状态):
        

      -a或-u:访问(使用)时间
           -m或-t:修改时间(默认)
           -c:inode状态更改

    • 时间范围(其中N是正整数):
        

      -i N:分钟(默认值,N等于1分钟)
           -d N:天
           -o N:月份      -y N:岁      -g N:N是DATE(例如:“2017-07-06 22:17:15”)

    • 试验:
        

      -p“pat”:匹配的可选模式(例如:-p“* .c”查找c文件)(默认为-p“*”)
            - \&GT; :file比给定范围更新,即在其之后修改时间       - \&LT; :文件比给定范围旧,即时间是从它之前。 (默认)
            - \ =:文件正好是N(分钟,日,月,年)。

实施例

  • 查找超过10分钟(访问时间)的C源文件(详细程度为3):

$ oldfiles -a -i 10 -p"*.c" -\> -nvvv Starting oldfiles script, by beco, version 20170706.202054... $ oldfiles -vvv -a -i 10 -p "*.c" -\> -n Looking for "*.c" files with (a)ccess time newer than 10 minute(s) find . -name "*.c" -type f -amin -10 -exec ls -ltu --time-style=long-iso {} + Dry-run

  • 查找超过一个月的H头文件(修改时间)(详细程度2):

$ oldfiles -m -o 1 -p"*.h" -\< -nvv Starting oldfiles script, by beco, version 20170706.202054... $ oldfiles -vv -m -o 1 -p "*.h" -\< -n find . -name "*.h" -type f -mtime +30 -exec ls -lt --time-style=long-iso {} + Dry-run

  • 查找一天内的所有(*)文件(2016年12月1日;无冗长,干运行):

$ oldfiles -mng "2016-12-01" -\= find . -name "*" -type f -newermt "2016-11-30 23:59:59" ! -newermt "2016-12-01 23:59:59" -exec ls -lt --time-style=long-iso {} +

当然,删除-n程序将自行运行find命令,为您省去麻烦。

我希望这有助于每个人最终了解这些{a,c,t}{time,min}选项。

LS输出:

您还会注意到“ls”选项ls OPT会更改以匹配您选择的时间类型。

克隆/下载oldfiles脚本的链接:

https://github.com/drbeco/oldfiles

答案 7 :(得分:0)

说明:使用带有find(创建时间)标志的Unix命令-ctime

find实用程序递归地列出列出的每个路径的目录树,并根据树中的每个文件评估一个表达式(由“ primaries”和“ operands”组成)。

解决方案:根据文档类型

-ctime n[smhdw]
             If no units are specified, this primary evaluates to true if the difference
             between the time of last change of file status information and the time find
             was started, rounded up to the next full 24-hour period, is n 24-hour peri-
             ods.

             If units are specified, this primary evaluates to true if the difference
             between the time of last change of file status information and the time find
             was started is exactly n units.  Please refer to the -atime primary descrip-
             tion for information on supported time units.

公式find <path> -ctime +[number][timeMeasurement] -ctime -[number][timeMeasurment]

示例

1。查找1周前之后和2周前之前创建的所有内容

find / -ctime +1w -ctime -2w

2。查找当前目录中在1天前到3天前创建的所有javascript文件(.js

find . -name "*\.js" -type f -ctime +1d -ctime -3d