查找在特定日期(例如星期一)最后修改的所有文件?

查找在特定日期(例如星期一)最后修改的所有文件?

所以我想用来find返回给定目录中最后一次修改于星期一的所有 .html 文件的列表。我怎样才能做到这一点?

答案1

我不确定直接使用 onlyfind或类似方法来执行此操作的好方法,但您可以使用findand grep

find -printf '%Tw:%h/%f\0' | grep -z '^1:'

既然是find,你当然可以组合其他标志:

find -name '*.html' -type f -printf '%Tw:%h/%f\0' | grep -z '^1:'

仅获取以.html.结尾的文件

解释

这是我的测试目录:

$ ls -la
total 68
drwxr-xr-x  2 anthony anthony  4096 Mar 24 17:53 .
drwxrwxrwt 98 root    root    61440 Mar 24 17:55 ..
-rw-r--r--  1 anthony anthony     0 Mar 24 17:53 monday
-rw-r--r--  1 anthony anthony     0 Mar 23 11:12 sunday

find-printf参数采用格式字符串。这里,%T 表示最后修改时间。后面w的表示星期几,从 0(星期日)到 6(星期六)。您可以使用a(缩写:Mon)或(完整:Monday)来获取名称A,但这些名称是特定于区域设置的。:给出一个字面量:.%h/%f是路径和文件名。\0null 分隔条目(就像这样-print0做)。

这样会打印出类似 的内容1:./.<NULL>0:./sunday<NULL>1:./monday<NULL>,如果您将 NULL 替换为换行符以提高可读性,则为tr '\0' '\n'

1:./.
0:./sunday
1:./monday

然后grep -z '^1:'查找以 1: 开头的内容,即星期一。

答案2

您可以ls以自定义格式输出日期

ls --time-style=+%A *.html | grep " Monday "

假设“Monday”不在任何文件名中。

答案3

虽然我觉得你的问题很可疑,但答案是:

find ./ -type f -name '*.html' -printf "%Ta %p\n" | grep '^Mon' | sed 's:^Mon ::'

.html根据服务器上设置的当前时区,它将找到以人类历史上任何星期一最后修改的结尾的所有文件。

答案4

您可以使用findwithstat查找修改时间戳为星期一的所有文件,如下所示:

find . -type f -exec stat -t %a  {} \; | awk 'match($10, /"Mon"/) {print $16}'

find命令将查找所有文件并统计它们,然后将其传送到awk过滤器。awk将匹配字段编号 10(即文件的修改时间)和字符串"Mon",以提取星期一修改的文件。该print $16语句将打印文件名。您可以删除$16以打印所有字段,也可以使用任意数字来打印选定的字段。

第一部分的示例输出(在 OS X 上):

$ cd /usr ; find . -type file -exec stat -t %a  {} \;

16777218 20556154 -rwxr-xr-x 1根轮0 19600“星期一”“星期四”“星期四”“星期六”4096 16 0x20 ./bin/du

16777218 20547205 -rwxr-xr-x 1根轮0 14256“星期三”“星期四”“星期四”“星期三”4096 16 0x20 ./bin/dwarfdump

16777218 20586248 -rwxr-xr-x 2根轮0 925“星期五”“星期四”“星期四”“星期日”4096 0 0x20 ./bin/easy_install

相关内容