即,-regex expr 表达式用正则表达式匹配完整路径的文件名,包含目录路径部分 。
用正则表达式匹配后缀名为 .c 文件的例子如下:
$ find . -regex '.*.c'./src/main.c$ find . -regex '.*c'./src./src/main.c可以看到,find . -regex '.*.c' 命令只打印出后缀名为 .c 的文件名 。
而 find . -regex '.*c' 命令除了打印后缀名为 .c 的文件名,还打印了其他的文件名,这个命令的正则表达式不够精确,少了关键的 . 来转义匹配点号 . 字符 。
在 .*.c 这个正则表达式中,最前面的 . 表示匹配任意单个字符,* 表示匹配零个或连续多个前面的字符,. 通过转义来表示 . 字符自身,c 表示字符 c 自身,组合起来就是匹配后缀名为 .c 的字符串 。
而 .*c 这个正则表达式匹配最后一个字符为 c 的字符串,不管在字符 c 前面是否有 . 字符,这个不符合后缀名的要求 。
下面例子用正则表达式来匹配多个后缀名:
$ find . -regex '.*.(c|am)'./src/main.c./Makefile.am这个例子同时匹配后缀名为 .c 和 .am 的文件名 。
在正则表达式中,(a|b) 表示匹配 a 或者匹配 b 。上面的 (c|am) 经过转义后,也就是 (c|am),用于匹配 c 或者 am,这样就比较好理解,不要被转义字符吓到了 。
匹配特定类型的文件在 Linux 中,文件类型可以分为目录 (directory)、文本文件 (regular file)、符号链接 (symbolic link)、socket,等等 。
find 命令可以用 -type c 表达式来指定匹配这些类型的文件 。
这是一个 test 类型表达式,GNU find 在线帮助手册对该表达式的说明如下:
Test: -type c例如,使用 -type f 来指定只匹配文本文件:
True if the file is of type c:
d: directory
f: regular file
l: symbolic link
s: socket
$ find . -type f./src/main.c./tests/bre.tests./Makefile.am可以看到,在打印结果里面,没有看到目录名,只有文本文件名 。注意:-type f 表达式只表示匹配文本文件,并不表示只查找文本文件,find 命令还是会查找出所给目录的所有文件,并把每个文件名依次传给后面的表达式进行评估,只有符合 -type f 表达式的文件才会返回 true,才会被打印出来 。
不符合这个表达式的文件也会被查找到,只是没有打印出来而已 。
推荐阅读
- ping 域名+端口 Windows和Linux下检测网络是否可用
- 10个实用Linux运维命令
- 在Centos7上安装图形化桌面工具
- 穿衣搭配|化妆师上「高级淡妆」的常用技巧,五星定妆法不怕卡粉、脱妆
- 防晒衣怎么选?教你3个小技巧,买到真正有防晒效果的防晒衣
- 绞股蓝最佳喝的时间,教你九个喝茶的技巧
- 玉兰花茶的泡法,玫瑰花茶泡法技巧
- Linux技巧:awk 命令简单入门介绍
- 如何做网络推广?有哪些渠道和方法?互联网老司机分享推广技巧
- 宫灯长寿花养殖方法及养护技巧
