例子
- 列出当前目录及子目录下所有的文件和文件夹
find . -print # -print 指明打印出匹配文件的文件名(路径)。当使用-print时,'\n'作为用于分隔文件的定界符
find . -print0 # -print0 指明使用'\0'作为定界符来打印每个匹配的文件名。当文件名中包含换行符时,这个方法就有用武之地
- 根据文件名或颪表达式匹配搜索
find /home/slynux -name "*.txt" -print # -name 参数 指定了文件名所必须匹配的字符串。我们可以将通配符作为参数使用。
find /home/slnnux -iname "*.txt" -print # -iname 参数跟-name一样的只是匹配名字的时候,忽略大小写
- 匹配多个条件中的一个
find . \( -name "*.txt" -o -name "*.pdf" \) -print #-o 参数进行多个参数的or条件操作
- 选项-path -name -regex参数的不同
find . -path "*txt*" -print # -path 将 文件路径作为一个整体进行匹配。
find . -name "*txt*" -print # -name 给定的文件名进行匹配
find . -regex ".*\(\.py\|\.sh\)$" -print # 跟-path类似,但是是基于正则表达式来匹配文件路径 此命令 匹配.py或.sh文件
- 否定参数
find . ! -name "*.txt" -print # 通过!否定参数的含义。
- 基于目录深度的搜索
find . -maxdepth 1 -type f -print # 只列出当前目录下的所有普通文件。即使有子目录,也不会被打印或遍历。 -type 用来指定搜索文件类型。 -type f 只列出普通文件类型
-maxdepth 或-mindepth 应用 作用find的第3个参数出现。如果作为第4个或之后的参数,就可能会影响到find的效率,因为它不得不进行一些不必要的检查。例如,如果-maxdepth 作为 第4个参数,-type作用为第三个参数,find首先会的出符合-type的所有文件,然后 在所有的匹配的文件中再找出符合指定尝试的那些。但是如果反过来。目录尝试作为第三个参数,-type作为第四个参数,那么find就能 够在找到所有符合指定尝试的文件后,再检查这些文件的类型,这才是最有效的搜索顺序。
- 根据文件类型搜索
find . -type d -print # -type用来指定文件类型 d 为目录 f 为普通文件 l为符号链接 c 字符设备 b 块设备 s 套接字 p fifo
find . -type f -print
find . -type l -print
- 根据文件时间进行搜索
find . -type f -atime -7 -print # 打印出在最近七天内被访问过的所有的文件
find . -type f -atime 7 -print #打印出在七天前被访问过的所有文件
find . -type f -atime +7 -print # 打印出访问时间超过七天的所有文件
#类似的,根据修改时间,用-mtime进行搜索 ;根据变化时间,用-ctime进行搜索
# -atime -mtime -ctime都是基于时间的参数,其计量单位是“天”
find . -type f -amin +7 -print #打印出访问时间在超 过7分钟的所有文件
find . -type f -mmin +7 -print #打印出修改时间超 过7分钟的所有的文件
find . -type f -newer file.txt -print # 找出比file.txt修改时间更长的所有文件
- 基于文件大小 的搜索
find . -type f -size +2k #大于2kb的文件
find . -type f -size -2k # 小于2kb的文件
find . -type f -size 2k #大小等于2kb的文件
- 删除匹配的文件
find . -type f -name "*.swf" -delete # -delete 可以用来删除find查找到的匹配文件
11.基于文件权限和所有权的匹配
find . -type f -perm 644 -print # -perm 参数 打印出权限为644的文件
find . -type f -name "*.php" ! -perm 644 -print #查找不是权限 为644的文件
find . -type f -user slynu -print # -user 参数,指定用户名或者uid
- -exec 结合find执行命令或动作
find . -type f -user root -exec chown slynux {} \; # 找出root拥有的所有文件,然后-exec更改所有权
# {}是一个特殊的字符串,与-exec 选项结合使用。对于每天匹配的文件,{} 会被 替换成相应的文件名。
find . -type f -name "*.txt" -exec printf "text file :%s\n" {} \;
- 跳过特定的目录
find . \( -name ".git" -prune \) -o \( -type f -print \)# 打印出不包括在.git目录中的所有文件名称
#这里的 \( -name ".git" -prune \) 的作用是用于进行排除,它指明了.git目录应用被排除掉。