1.文件查找与文件列表
find命令的工作方式如下:沿着文件层次结构向下遍历,匹配符合条件的文件,执行相应的操作
实例:
find . -print
# . 指定当前目录 ..指定父目录 打印文件和目录的列表 -print指明打印出匹配的文件名(路径),'
'作为用于对输出的文件名进行分隔 -print0指明使用' '作为匹配的文件名之间的定界符
2.根据文件名或正则表达式进行搜索:
find /home/chunyu -name "*.txt" -print #选项-name的参数指定了文件名所必须匹配的字符串,-iname(忽略大小写) #可以把通配符作为参数使用,"*.txt"能够匹配所有以.txt结尾的文件名
如果想匹配多个条件中的一个,可以采用OR条件操作:
find . ( -name "*.txt" -o -name "*.pdf" ) -print #find命令能够匹配所有这两类文件 # ( 以及 )用于将 -name "*.txt" -o "*.pdf" 视为一个整体
3.匹配文件路径:
find /home/chunyu -path "*/chunyu/*" -print #选项-path的参数可以使用通配符来匹配文件路径 #-path将文件路径作为一个整体进行匹配
4.基于正则表达式来匹配文件路径:
find . -regex ".*(.py|.sh)$" #-iregex可以让正则表达式忽略大小写
5.基于目录深度的搜索:find命令在使用时会遍历所有的子目录,我们可以采用深度选项-maxdepth和-mindepth来限制find命令遍历的目的深度,-maxdepth和-mindepth应该作为find的第三个参数出现
find . -maxdepth 1 -name "f*" -print #只允许find在当前目录中查找,深度可以设置为1; #当需要向下两级时,深度可以设置为2 #可以指定一个最小深度,告诉find应该从此处开始向下查找 #上述命令,列出当前目录下的所有以f开头的文件,即使有子目录,也不会被打印和遍历
6.根据文件类型搜索:Unix类系统将一切视为文件,文件具有不同的类型,例如普通文件,目录,字符设备,块设备,符号链接,硬链接,套接字以及FIFO等
find . -type d -print #-type可以对文件搜索进行过滤,指明特定的文件匹配类型 #普通文件 f 符号链接 l 目录 d 字符设备 c 块设备 b 套接字 s FIFO p
7.根据文件时间进行搜索:Unix和Linux文件系统中的每一个文件都有三种时间戳,Unix中并没有所谓“创建时间”的概念
访问时间(-atime):用户最近一次访问文件的时间
修改时间(-mtime):文件内容内容最后一次被修改的时间
变化时间(-ctime):文件元数据(例如权限和所有权)最有一次改变的时间
find . -type f -atime -7 -print #-atime -mtime -ctime可以作为find的时间选项 #它们可以用整数值来指定,单位是天 #这些数值通常还可以带有 +和- ,+表示大于多少天,-表示小于多少天 #上述命令,打印出最近7天内被访问的所有文件
其他一些基于时间的参数是以分钟作为计量单位
-amin(访问时间-分钟)
-mmin(修改时间-分钟)
-cmin(变化时间-分钟)
find . -type f -amin +7 -print #打印出访问时间超过7分钟的所有文件
find的另一个漂亮的特性是 -newer参数,使用 -newer 我们可以指定一个用于比较时间戳的参考文件,然后找出比参考文件更新的(更近的修改时间)所有文件
find . -type f -newer catTest.sh -print
8.基于文件大小的搜索:
find . -type f -size +2k #同理,+2k表示大于2kb的文件搜索,-2k表示小于2kb的文件进行搜索 #其他文件大小单元 b 块(512字节) c 字节 w 字(2字节) k 1024字节 M 1024K字节 G 1024M字节
9.删除匹配的文件
find . -type f -name "*.swp" -delete #选项-delete可以用来删除find查找的匹配文件
10.基于文件权限和所有权的匹配
find . -type f -perm 644 -print #-perm 指明find应该只匹配具有特定权限值的文件 find . -type f -name "*.php" ! -perm 644 -print #用上述命令可以搜索出没有设置好执行权限的PHP文件
根据文件所有权进行搜索:
find . -type f -user chunyu -print
#打印出用户chunyu拥有的所有文件,参数USER可以是用户名或者UID
11.利用find命令执行命令或动作:find命令可以借助选项-exec与其他命令进行结合
sudo find /home/chunyu -type f -user root -exec chown chunyu {} ; #注意这里运行命令必须使用sudo,才有权限修改文件所属权限 #在这个命令中,{}是一个与-exec选项搭配使用的特殊字符,对于每一个匹配的文件,{}会被替换成相应的文件名 #例如find的命令找到两个文件test1.txt和test2.txt,其所有者均为root那么find就会执行:chown chunyu test1 和chown chunyu test2.txt
-exec能够同printf结合来生成有用的才输出信息:
find . -type f -name "*.txt" -exec printf "Text file:%s " {} ;
12.让find跳过特定的目录:
find PycharmProjects/ShellCute ( -name ".git" -prune ) -o ( -type f -print ) #以上命令打印出不包括在.giut目录中的所有文件的名称(路径) #( -name ".git" -prune )的作用是用于进行排查,它指明了.git目录应该被排除在外 而 ( -type f -print ) 指明了需要执行的动作