Linux 里比较常用的一个命令find,用来查找文件。今天介绍下find的常用使用方法
基本信息
命令名称 :find
英文解释:find - search for files in a directory hierarchy
所在目录: /bin/find
语法:find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path...] [expression]
解释说明
默认path是当前文件夹,默认的expression是 -print,expresson可能包含operators, options, tests, and actions。
find 根据path 和expression来查询,在命令行中,在第一个-(),!之前那部分为path,后面为expression。如果path 为空,则表示当前文件夹,如果expression为空,则默认使用print来表示expresson。
例如
在opt文件夹下执行ll,先看下opt文件夹下的文件以及文件夹。
再执行find
我们看到的结果是展示出opt文件夹下的所有文件和文件夹。
操作符:operators
操作符,类似编程里面的操作符,类似与,或,非,等等,相对来说,用的比较少。
( expr) #最高优先级,
! expr #对expr 的值取反
-not expr # 类似!expr
expr1 expr2 #等价于 expr1 and expr2
expr1 -a expr2 #等价于expr1 and expr2
expr1 -o expr2 #等价于 expr1 or expr2
命令:find . -type f -a -name '*.pdf' 搜索当前文件夹下 文件类型是f 的 and 文件名称是 ‘*.pdf’。
tests
(N can be +N or -N or N)
+n:大于n
-n:小于n
n :等于n
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去 n 天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去 n 天内创建的文件
-mtime n : 在过去 n 天内修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
-type [c]:查找指定类型的文件,
类型c可取值:
b - 块设备文件。
c - 字符设备文件。
d - 目录。
f - 普通文件
l - 符号链接文件。
p - 管道文件。
s - socket。
-delete:删除文件,如果删除成功则返回true,如果删除失败,将给出错误信息。
-exec [command] ;:注意有个分号";"结尾,该action是用于执行给定的命令。
-exec command {} +:这种-exec动作变种,只允许使用find查找到的文件一次;
-execdir command ;:与-exec相似,区别在于执行command时的working path是从匹配到的文件的所在目录;
-execdir command {} +:与-exec command {} +相似,区别也是在于命令的工作路径;
-ls:总是返回true。将找到的文件以"ls -dils"的格式打印出来,其中文件的size部分以KB为单位;
-ok [command] ;:类似于-exec,但在执行命令前会交互式进行询问;
-okdir [command] ;:类似于-execdir,但在执行命令前会交互式进行询问;
-print:总是返回true。这是默认的action,输出搜索到文件的全路径名,并尾随换行符"\n"。
-print0:总是返回true。输出搜索到文件的全路径名,并尾随空字符"\0"。
-printf [format]:以指定的格式输出匹配的文件名;
实例
查到opt文件夹的的文件夹并且名称为name 的
命令:find . -type d -a -name 'test'
列出当前目录以及子目录下的所有文件
命令:find . -type f
列表当前目录下的所有子目录
find . -type d
查询文件小于10kb的文件 并且文件名包含.gz
命令:find . -type f -size +10k -name '*.gz'
如果没有文件名现在则去掉 -name ‘*.gz’即可. 小于10k 则用-10k表示, 等于10k 则用10k 表示。
忽略大小写查找
命令:find . -type f -iname 'findfiletest.txt'
多条件查询(查找结尾为.txt或者pdf结尾的文件)
命令:find . -type f -name '*.txt' -o -name '*.pdf'
或者find . \( -name "*.txt" -o -name "*.pdf" \)
查询文件不是以.txt结尾的文件
命令:find . -type f ! -name '*.txt'
根据文件访问时间进行搜索 atime(文件最后访问时间,单位是天)mtime (文件最后修改时间),更改时间戳 (ctime),+ 表示“大于”,- 表示“小于”。
查看最近一天内访问的文件
命令:find . -type f -atime -1
按文件大小查找
-size选项指定大小查找文件(+表示“大于”,-表示“小于”):
b:512 字节块(默认)
c:字节
w:双字节字
k:KB
M:MB
G:GB
9.1查询大于5kb的文件
命令:find . -type f -size +5k
9.2查询小于5kb的文件
命令:find . -type f -size -5k
actionts
表达式中actions是对查到的文件进行操作的参数。
-fls file:跟-ls功能一样,区别是将信息写入file指定的文件,而不是显示在屏幕上。
-print:将找到的文件显示在屏幕上,实际上默认find命令就会将文件打印出来显示。
-print0:-print参数会将每个文件用换行分割,而这个参数适用null分割。有时候在脚本编程时可能会用上。
-fprint file:-print参数的写入文件版本。将内容写到文件中,而不是显示在屏幕上。
-fprint0 file:-print0的写入文件版本。
-delete:可以将找到的文件直接删除。
-printf:格式化输出方式打印
命令:将查到findfiletest.txt的文件删除
命令: find . -name findfiletest.txt -delete
find 命令 exec
-exec参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
{}花括号代表前面find查找出来的文件名
查找当前目录下所有.txt文件并打印出详细的文件信息
命令: find . -type f -name "*.txt" -exec ls -l {} \;