Find 详解 macOS
逻辑运算符
- -o 或者
- !非
如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件
文件名
find . -name "*.rmvb"
正则表达式
使用 -regex
时有一点要注意:-regex
不是匹配文件名,而是匹配完整的文件名(包括路径)。
find . -regex ".*.rmvb"
# 查找所有 RMVB文件
完整路径的意思就是不只是文件名这样,它还有前面的东西,所以也需要将前面部分考虑到正则表达式中才行,不然匹配不到文件,如下:
Kyle@Kyles-mbp Downloads % find . -type f -regex "漫长.*.mp4"
Kyle@Kyles-mbp Downloads % find . -type f -regex ".*漫长.*.mp4"
./漫长的季节第01集.mp4/漫长的季节第01集.mp4
./漫长的季节第06集.mp4/漫长的季节第06集.mp4
./漫长的季节第10集.mp4/漫长的季节第10集.mp4
./漫长的季节第11集.mp4/漫长的季节第11集.mp4
./漫长的季节第07集.mp4/漫长的季节第07集.mp4
./漫长的季节第12集.mp4/漫长的季节第12集.mp4
./漫长的季节第04集.mp4/漫长的季节第04集.mp4
./漫长的季节第08集.mp4/漫长的季节第08集.mp4
./漫长的季节第09集.mp4/漫长的季节第09集.mp4
./漫长的季节第05集.mp4/漫长的季节第05集.mp4
./漫长的季节第02集.mp4/漫长的季节第02集.mp4
./漫长的季节第03集.mp4/漫长的季节第03集.mp4
扩展 Regex -E
直接使用 -regex
是使用的基础的正则语法,想用高级的就需要添加 -E
这个参数,如位置指定等等。
(Mac
与 Linux
有所不同,Linux
中是 -regextype posix-extended
)
如:
find -E . -iregex ".*(金刚狼|x战警).*"
文件大小
find . -size +1000M
# 查找大于 1000Mb 的文件
# 大小单位有 b(512字节) c w(2字节) k M G 区分大小写
文件类型
f
普通文件l
符号连接d
目录c
字符设备b
块设备s
套接字p
Fifo
find . -type f -name "*.rmvb"
# 搜索普通文件 .rmvb
文件时间戳
- 访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
- 修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
- 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间
find . -type f -atime -7
# 搜索最近七天内被访问过的所有文件
find . -type f -atime 7
# 搜索恰好在七天前被访问过的所有文件
find . -type f -atime +7
# 搜索超过七天内被访问过的所有文件
否定参数 !
find /home ! -name "*.txt"
# 找出/home下不是以.txt结尾的文件
将搜索结果作为参数执行
{}
用于与 -exec
选项结合使用来匹配所有文件,然后会被替换为相应的文件名。
-ok
和 -exec
行为一样,不过它会给出提示,是否执行相应的操作。
find . -type f -name "*.txt" -exec cat {} ;> all.txt
# 查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
find .-type f -user root -exec chown tom {} \;
# 找出当前目录下所有root的文件,并把所有权更改为用户tom 此处 ; 需要转义
查找结果写入文件
find . -name *.rmvb > FilmList.txt