我应该找到列出 9 月份创建且所有者可读的所有文件的命令。还请解释该命令的工作原理。
我知道我应该使用
ls -l
我会|
在其中的某个地方使用但不确定管道之前和之后是什么。
答案1
对于日期范围,您可以使用一个技巧。首先使用 touch 创建两个虚拟文件,如下所示:
touch -t 201209010000 /tmp/1sept
touch -t 201209302359 /tmp/30sept
正如您所看到的,他们现在有了期望的创建日期:
$ ls -l 1sept 30sept
-rw-rw-r-- 1 topr topr 0 Sep 1 00:00 1sept
-rw-rw-r-- 1 topr topr 0 Sep 30 2012 30sept
现在您已准备好执行最后一个命令:
find /thepath/you/like -type f -newer /tmp/1sept -and ! -newer /tmp/30sept -exec stat -c '%A %n' {} \; | grep '^.r'
稍微解释一下:
- -type f 仅搜索文件
- -newer !-和-newer使用虚拟文件作为模板设置你喜欢的日期范围
- -exec 对每个找到的文件触发一个命令,写为 {} \;
- stat 命令打印有关文件的信息,%A 表示人类可读的访问权限字符串,如 -rw-rw-r-- 和 %n 打印文件名
- grep '^.r' 使用常规例外过滤结果,仅显示以 <anycharacter>r 开头的行,因此检查文件所有者是否被授予读取访问权限
答案2
ls -lh
应该以人类可读的长格式列出文件(取决于你的shell)。
现在,您想要grep
(这是一个过滤程序)找到符合您要求的内容。
例如,要查找所有名为 david 且于 2011 年制作的文件,我可以使用:
ls -lh | grep "david" | grep "2011"
(是的,有更快、更简单的方法可以做到这一点,但我们的想法是让提问者觉得简单一点)。
在您的例子中,您想要过滤第一个文本块,以查找设置的可读位和 9 月的日期。查看输出ls -lh
,您应该能够创建自己的 grep 命令。
答案3
试试这个。希望它能有所帮助:
ls -la | grep -e "Sep"