为什么“staff*22”没有显示任何内容,而“staff.*22”列出了包含 staff 后跟 22 的行,尽管其中任何一行都不包含“.”?
$ ls -l | grep "staff*22"
$ ls -l | grep "staff.*22"
drwxrwxr-x 2 kim staff 68 Jan 12 22:23 hihi
drwxrwxrwx 4 kim staff 136 Jan 12 22:29 temp2
drwxrwxrwx 3 kim staff 102 Jan 12 22:41 tes2
答案1
给定的 grep 命令做什么
从您的输出中可以明显看出,您想要查找属于“staff”组且在 22 点(或 12 小时制的晚上 10 点)创建的所有文件。我们将在下面讨论这个问题,但首先让我们弄清楚您的grep
命令的作用以及为什么它们不是满足您需求的正确工具。
首先,grep
你执行的两个命令在解释方式上略有不同,而且你的方法不正确——你不应该尝试解析 ls 的输出。
grep "staff*22"
读作“匹配所有以‘staf’开头的行,并且可能有或可能没有额外的‘f’,后面紧跟着‘22’。”$ echo "staff whatever 22" | grep 'staff*22' $ echo "staff22" | grep 'staf*22' staff22 $ echo "staf22" | grep 'staff*22' staf22 $ echo "staf22" | grep 'staff*22' staf22
grep "staff.*22"
读作“匹配所有包含‘staff’、其间有零个或多个字符(任何类型的字符)以及数字 22 的行”。$ echo "staff whatever 22" | grep 'staff.*22' staff whatever 22
更好的方法
ls
命令通常只用于交互式列表,即当您只想快速查看文件夹内的内容时。当需要查找特定文件或通过脚本处理这些文件时,find
命令是最佳选择。它具有-group
变量,可帮助您隔离属于组的所有文件staff
,并-nevermt
查找修改时间晚于某个特定日期的文件。例如,您想要的可能是:
find . -group staff -newermt "2017-01-12 21:59:59"
另请参阅:https://superuser.com/questions/580273/ubuntu-linux-find-files-between-specific-times