linux find 命令总是用了忘,再查,再用,再忘。总算无法忍受这种无聊游戏了,遂有此篇。
搜索文件
根据文件名搜索
搜索指定名称的文件,大小写敏感:find <path> -name <文件名>
搜索指定名称的文件,忽略大小写:find <path> -iname <文件名>
文件名中可以使用通配字符(wildcard character):
- []:匹配方括号中字符范围内的任何一个字符
- *:匹配零个或多个任意字符
- ?:匹配零个或一个任意字符
根据文件类型搜索
用法:find <path> -type <文件类型>
-type 表示根据文件类型搜索。文件类型主要有:
- f:常规文件
- d:目录
- l:软链接,即符号链接
- s:socket 文档
- p:具名的 pipe(FIFO)
- b:块设备文件
- c:字符设备文件
根据时间属性搜索
用法:find <path> <时间选项> <n>
其中 <时间选项> <n>
就是用来筛选文件的 boolean 表达式。把时间单位记作 U,n 就是时间单位的个数。find 程序的启动时间记作 s,文件的某种时间属性记作 x,那么这个表达式条件的伪代码就是 rounded_up_to_the_next_full_time_unit(x - s) <compare_operator> n
。
时间选项:
- -atime n:n 为数字,查找在 n 天前的那一天内被 access 过的文件
- -mtime n:n 为数字,查找在 n 天前的那一天内被 modify 过的文件
- -ctime n:n 为数字,查找在 n 天前的那一天内被 change 过状态的文件
- -amin n:n 为数字,查找在 n 分钟前的那一分钟内被 access 过的文件
- -mmin n:n 为数字,查找在 n 分钟前的那一分钟内被 modify 过的文件
- -cmin n:n 为数字,查找在 n 分钟前的那一分钟内被 change 过状态的文件
再来解释哈那两个看起来晦涩难懂的时间限定:
- -mtime 7:查找 7 天前被 modify 过的文件。如果今天是 9/17,那么 7 天前的那一天就是 9/11
- -mtime -7:查找 7 天内被 modify 过的文件。如果今天是 9/17,那么 7 天之內就是 9/11 到 9/17
- -mtime +7:查找 modify 的时间是在 7 天以上的文件。如果今天是 9/17,那么 modify 时间在 7 天以上的文件就是 9/11 以前修改过的文件
- -mtime +7 -mtime -14:查找 modify 时间是在 7 天以上、14 天以下的文件
- -mmin -60:查找最近一小时内被修改过的文件
- -cmin -60:查找最近一小时内被修改过状态的文件
- -amin -60:查找最近一小时内被存取过的文件
所有时间选项指定时间的方式都相同。