我在工作时通过telnet使用AIX,我想知道如何在日期范围之间查找特定文件夹中的文件。例如:我想查找文件夹X中在01年8月13日到31日 - 8月13日之间创建的所有文件。
观察:
touch
技巧(你创建两个空文件以使用-newer选项)对我不起作用。答案 0 :(得分:86)
如果您使用GNU find
,那么从版本4.3.3开始,您可以:
find -newerct "1 Aug 2013" ! -newerct "1 Sep 2013" -ls
它将接受GNU date -d
接受的任何日期字符串。
您可以将c
中的-newerct
更改为a
,B
,c
或m
中的任何一个,以便查看时间/出生/的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)
我试图以更完整的方式回答这个问题,最后我创建了一个完整的脚本,其中包含帮助您理解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"]})
-h, - help:显示此帮助。
-V, - version:显示版本。
-v, - verbose:打开详细模式(累计) -n, - dr-run:不要运行,只是解释如何创建“查找”命令
-a或-u:访问(使用)时间
-m或-t:修改时间(默认)
-c:inode状态更改
-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(分钟,日,月,年)。
$ 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
$ 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
$ 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 OPT
会更改以匹配您选择的时间类型。
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