Linux find 命令是一个强大的文件查找工具,它允许用户根据各种条件在指定的目录及其子目录中递归地搜索文件。
基本结构与用法:
find [starting_directory] [expression(s)] [action]
- starting_directory:可选参数,指定开始查找的位置,默认为当前目录(.)。可以是绝对路径或相对路径。
- expression(s):用于匹配文件或目录的一系列条件,例如:
- -name “filename”:按名称查找文件。
- -type f/d/l:查找普通文件(f)、目录(d)或符号链接(l)。
- -mtime/-atime/-ctime n:查找在过去n天内被修改/访问/状态改变过的文件。
- -size +50k:查找大于50KB的文件。
- -user username:查找属于特定用户的文件。
- -perm mode:查找具有特定权限位的文件。
- -empty:查找空文件或空目录。 等等,还有很多其他表达式。 action:当文件满足所有给定的条件时执行的操作,如:
- -exec command {} \; :对找到的每个文件执行一个命令。
- -print: 默认操作,打印出找到的文件或目录的名字(如果未指定其他操作,则会默认使用-print)。
- -delete:删除找到的文件或目录(需谨慎使用)。
用法举例:
- -name pattern 按照文件名匹配。可以使用通配符,如星号(*)代表任意数量的字符,问号(?)代表单个字符。
find /path/to/search -name "file*.txt" # 查找以“file”开头且扩展名为“.txt”的所有文件
- -iname pattern 类似于 -name,但进行不区分大小写的匹配。
find . -iname "*.jpg" # 不区分大小写查找所有的JPG文件
- -type type 根据文件类型进行匹配,常用的类型有:
- f:普通文件
- d:目录
- l:符号链接(软链接)
find /home/user -type d # 查找/home/user下的所有目录
- -mtime n 查找在过去n天内最后一次修改时间发生改变的文件。n可以是正数(表示从现在起往前推算)、负数(表示从现在起向后推算)或0(表示查找访问时间正好为n天前的文件)。
find . -mtime -7 # 查找当前目录及其子目录下7天内被修改过的文件
- -size size 根据文件大小进行匹配,单位可以是c(字节),k(KB),M(MB),G(GB)等。
find /var/log -size +10M # 查找/var/log下大于10MB的所有文件
- -user username 根据属主用户名查找文件。
find /home -user john # 查找/home下属主为john的所有文件和目录
- -group groupname 根据所属组名称查找文件。
find /shared -group developers # 查找/shared下属于developers组的所有文件和目录
- -perm mode 根据权限模式查找文件。可以指定完整的八进制权限模式或者部分模式(例如,只检查其他用户的执行权限时可以使用-perm o+x)。
find . -perm 755 # 查找当前目录及其子目录下具有rwxr-xr-x权限的文件和目录
- -empty 查找空文件或空目录。
find /var/tmp -type f -empty # 查找/var/tmp下所有空文件
这些条件参数可以组合使用,形成复杂的搜索表达式。例如,要查找所有由特定用户拥有的、并且在过去一周内被修改过的大于10MB的文本文件,可以这样写:
find / -type f -user alice -mtime -7 -size +10M -name "*.txt"
注意事项:
- 使用 find 命令时应确保有足够权限访问所搜索的目录和文件。
- -exec 后面的命令应当正确转义分号 \;,以结束命令序列。
- 对于可能包含特殊字符的文件名,可能需要使用双引号 " 将其包围起来以避免shell扩展错误。 请根据实际需求组合不同的表达式来构造适合的 find 命令。