获取在特定日期已修改的所有文件


20

是否可以找到php某个目录中在某个日期已被修改的所有文件

我在用着

find /var/www/html/dir/ -mtime -28 | grep '\.php' 

以获得最近28天内修改过的文件,但我只需要在以下日期修改过的文件: 2011-02-08

Answers:


22

在最新版本find(例如GNU 4.4.0)上,您可以使用该-newermt选项。例如,查找在2011-02-08上已修改的所有文件

$ find /var/www/html/dir/ -type f -name "*.php" -newermt 2011-02-08 ! -newermt 2011-02-09

另请注意,您无需通过管道进入grep即可查找php文件,因为find在该-name选项中可以为您完成此操作。

看看这个SO答案以获得更多建议:如何使用“查找”搜索在特定日期创建的文件?


4

烦人的是,standard没有任何直接的方法findfindGNU系统上的最新版本(例如,非嵌入式Linux,Cygwin)和某些* BSD具有诸如-newermt将文件日期与拼写日期进行比较的选项

使用standard find,您所要做的就是将文件日期与当前日期(-mtime)或固定文件进行比较。在这种情况下,当前日期通常是没有用的(它从您运行find命令的时间开始算起,而大多数应用程序需要日历日期)。这使您无需创建临时文件来定义范围。

touch -t 201103070000 start.tmp
touch -t 201103080000 stop.tmp
find . -newer start.tmp \! -newer stop.tmp -print
rm start.tmp stop.tmp

2

您已经有了几乎正确的命令,因为该命令的版本find不允许您使用日期:

find /var/www/html/dir/ -mtime 27 | grep '\.php'

通常,对于find- Ñ手段不是较少Ñ手段相等,+ Ñ手段“超过”。传统find有一些例外,但是GNU find和其他较新的版本(例如BSD / Mac OS X上)已纠正了这些例外。(如果您发现自己在Solaris或其他商业Unix系统上,请记住这一点。)


1

zsh可以使用with 函数age来仅打印在特定日期已修改的文件的名称:

自动加载年龄
打印-rl-* .php(.e:age 2011/02/08 :)

或者,如果您想进行递归搜索:

自动加载年龄
setopt Extendedglob
打印-rl-** / *。php(.e:age 2011/02/08 :)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.