我的任务之一是计算与特定日期模式匹配的文件数量。实际上,我需要做的是循环遍历目录,检查每个文件名,找到该文件名中的第二个句点,然后检查接下来的 4 个字符以查看我正在组装的日期字符串是否匹配。
2012 年 11 月将表示为“1211”。使用下面文件名中第二个句点之后的前四个字符,这将使我们命中第一个文件名(“o.tt.121113150804”),因为它与该模式匹配。我会计算该文件的数量,然后不理会其他两个文件。
下面的文件只是一个示例。它们可以用多种不同的方式命名。它们通常只是 99% 以下时间的变体。事实上,有 2 个句点,我需要检查第 2 个句点之后的 4 位数字,但这是一个确定的常数。
我需要检查的文件名:
o.tt.121113150804
o.stpw.101209092541
i.rtat.120831045704
最佳答案
这可以单独使用 ls
来完成,但这也将匹配目录:
$ ls
i.rtat.120831045704 o.stpw.101209092541 o.tt.121113150804
$ ls *.*.1121*
o.tt.121113150804
但是 find
更强大、更灵活:
$ find . -maxdepth 1 -type f -iname "*.*.1211*"
./o.tt.121113150804
选项:
-maxdepth 1
只在这个目录中查找。
-type f
只能查找文件,不能查找目录。
-iname
使用模式来匹配文件名,其中 *
匹配任何内容,因此 *.*.1211*
匹配后面跟着 的任何内容.
后跟任何内容,然后是第二个 .
后跟您的日期字符串和 *
任何其他内容。
编辑:
要计算匹配数,您可以通过管道传输到 wc -l
并使用命令替换 $(...)
将值存储在变量中:
$ ls
i.rtat.120831045704 o.stpw.101209092541 o.tt.121113150804
o.tt.121113150804c1 o.tt.121113150804c2
$ find . -maxdepth 1 -type f -iname "*.*.1211*" | wc -l
3
$ found=$(find . -maxdepth 1 -type f -iname "*.*.1211*" | wc -l)
$ echo $found
3
关于shell - 查找包含字符串出现次数的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13884349/