所以我想用来find
返回给定目录中最后一次修改于星期一的所有 .html 文件的列表。我怎样才能做到这一点?
答案1
我不确定直接使用 onlyfind
或类似方法来执行此操作的好方法,但您可以使用find
and 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
是路径和文件名。\0
null 分隔条目(就像这样-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
您可以使用find
withstat
查找修改时间戳为星期一的所有文件,如下所示:
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