linux下的find指令

时间:2023-01-31 11:41:23

文件的查找

在Linux下我们可以用到三个命令来查找文件,通常我们都是先使用whereis或者是locate来检查,如果真的找不到了我们才以find来找。为什么呢?因为whereis和locate是利用数据库来查找数据,所以相当快速,而且并没有实际查询硬盘,比较节省时间。但是find是直接查找硬盘,如果你的硬盘比较老旧的话,就会花费很长的时间。
我们上面说到whereis和locate找不到了才会使用find查找,所以find是很强大的查找命令,下面我们看一下find的功能有哪些:
1.命令格式:
find pathname -options [-print -exec -ok …]
2.命令功能:
用于在文件树中查找文件,并做相应的处理(可能访问磁盘)
linux下的find指令
3.命令选项:
按照文件名,文件权限,文件所属查找
linux下的find指令
-prune 命令的详解:
(存在目录dir0和dir1及其子目录)
1:在除dir0及子目录以外的目录下查找txt后缀文件

  find ./ -path './dir0*' -a -prune -o -name *.txt -print

说明:-a 应该是and的缩写,意思是逻辑运算符‘与’(&&); -o应该是or的缩写,意思是逻辑运算符‘或’(||), -not 表示非.
命令行的意思是:如果目录dir0存在(即-a左边为真),则求-prune的值,-prune 返回真,‘与’逻辑表达式为真(即-path ‘./dir0*’ -a -prune 为真),find命令将在除这个目录以外的目录下查找txt后缀文件并打印出来;如果目录dir0不存在(即-a左边为假),则不求值-prune ,‘与’逻辑表达式为假,则在当前目录下查找所有txt后缀文件。
(dir0*表示dir0及其子目录)
2:在除dir0、dir1及子目录以外的目录下查找txt后缀文件

 find ./ \( -path './dir0*' -o -path './dir1*' \) -a -prune -o -name *.txt -print

注意:圆括号()表示表达式的结合。即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。由于命令行不能直接使用圆括号,所以需要用反斜杠’\’进行转意(即’\’转意字符使命令行认识圆括号)。同时注意’(‘,’)’两边都需空格。
时间参数
atime:文件最后一次被访问的时间
ctime:改变文件的属性更新的时间
mtime:改变文件内容时更新的时间
你想找出被改动的过的文件名使用命令:find ~ -mtime n
(~代表主工作目录可以换成其他目录,n代表天数,如下图所示)
linux下的find指令

其他命令选项:
-nogroup 查找⽆无有效所属组的⽂文件,即该⽂文件所属的组在/
etc/groups中不存在。
-nouser 查找⽆无有效属主的⽂文件,即该⽂文件的属主在/etc/
passwd中不存在。
-newer file1 ! file2 查找更改时间⽐比⽂文件file1新但⽐文
件file2旧的⽂文件。
-type d 目录
-type b 块设备文件
-type c 字符设备文件
-type p 管道文件
-type l 符号链接文件
-type f 普通文件
-size nc 查找文件长度为n块的文件,带有c时表示文件长度以字节记
Linux ⽤用find命令查找⽂文件大小为XX的文件的办法:
例如:⼀一个⽂文件5556字节,可以这样写
find /root -size -5557c -size +5555c -exec ls -ld {} \;
即查找⼤大于5555字节⼩小于5557字节的⽂文件,以上查找的是/root目录。
find /root -size -500K -size +50K -exec ls -ld {} \;
查找 小于500K,大于50K的⽂文件。
-mount 在查找文件时不跨越文件系统的mount点。
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-fstype 在查找位于某一文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,改配置文件中包含了本系统中有关文件系统的信息。