Regex 使用grep列出10小时前更改的目录中的文件
这个练习是我从 使用grep在主目录中列出10小时前更改过的文件,但不包括目录 使用Regex 使用grep列出10小时前更改的目录中的文件,regex,bash,grep,Regex,Bash,Grep,这个练习是我从 使用grep在主目录中列出10小时前更改过的文件,但不包括目录 使用find命令似乎很简单,但如何使用grep命令查找在过去10小时内更改的文件 谢谢 好吧,这是一种讨厌的行为,但这是一种锻炼,我很好奇。正则表达式可能太简单了,但它在我的测试用例中工作。这里的“诀窍”是我用的是“stat”而不是“ls”。使用“stat”,您可以请求特定字段(包括上次修改的日期)并格式化输出。在这里,我获取当前时间戳,返回10小时,然后通过grep将stat格式化为字符串形式的模式,修改日期时间戳
find
命令似乎很简单,但如何使用grep
命令查找在过去10小时内更改的文件
谢谢 好吧,这是一种讨厌的行为,但这是一种锻炼,我很好奇。正则表达式可能太简单了,但它在我的测试用例中工作。这里的“诀窍”是我用的是“stat”而不是“ls”。使用“stat”,您可以请求特定字段(包括上次修改的日期)并格式化输出。在这里,我获取当前时间戳,返回10小时,然后通过grep将stat格式化为字符串形式的模式,修改日期时间戳和文件名:
sh-3.2$ date "+%s"
1373170496
sh-3.2$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1373170496-36000
1373134496
sh-3.2$ stat -f"%Sp %m %N" * | grep "^[\-].*13731[3-7][0-9][0-9][0-9][0-9].*$"
-rw-r--r-- 1373168941 fileAB
-rw-r--r-- 1373168944 fileAC
其中fileAB和fileAC是两个空文件,我接触了它们以获取一些代表性数据。匹配显示统计输出,手册页对此有更好的解释。问题来自《初学者Bash指南》第4章。正则表达式。这不是一个实际的问题,很明显,这是为了以一种有点扭曲的方式使用正则表达式。此外,这本书托管在Linux文档项目的站点上,因此可以安全地假设使用常用工具的GNU实现在Linux中实现这一点 下面是我的解决方案,使用
grep
(稍微):
说明:
选项用于列出所有文件,包括隐藏文件(ls
),使用长格式(-a
),省略所有者和组信息(-l
,-g
),并将时间格式化为由-g
日期解释的时间,
表示自1970-01-01 00:00 UTC以来的秒数%s
匹配以字母“d”以外的其他字母开头的行,实际上排除了目录grep
- 我们将这一点传递给
,因为坦率地说,没有合理的方法来弯曲正则表达式以匹配表示“不到10小时前”的日期awk
touch marker.touch -d '10 hours ago'
find . -newer marker.touch -maxdepth 1 -type f
你。。。不会。使用
find
。其目的可能是通过管道将ls-l
(或类似)的输出传输到grep
。顺便说一句,这是一种糟糕的做法:你建议改为find
。对于熟悉Unix实用程序来说,这可能是一个很好的教育练习,但在“真实”脚本中解析ls
的输出并不是一个好主意,因为类Unix系统通常对合法文件名没有什么限制。@ruakh即使我将输出传输到grep,我仍然不知道如何处理时间戳。这个练习有缺陷。这就像是在问:“我如何使用grep来了解玻利维亚的更多信息?”你可以,但你不应该。@codenob:呃,说得对。我假设有一个ls
的选项,可以用某种形式显示时间戳,但通过查看man ls
和info ls
(和man date
和info date
),我没有看到。
touch marker.touch -d '10 hours ago'
find . -newer marker.touch -maxdepth 1 -type f