在Linux下我们可以用到三个命令来查找文件,通常使用whereis或者是locate来检查,如果真的找不到了我们就以find来找。因为whereis和locate是利用数据库来查找数据,所以相当快速,而且并没有实际查询硬盘,比较节省时间。但是find是直接查找硬盘,如果你的硬盘比较老旧的话,就会花费很长的时间。
find指令需要在目录结构中搜索文件,并执行指定的操作。它用于在文件树中查找文件,并做出相应的处理,可能访问到磁盘。find命令提供了相当多的查找条件,功能十分强大,所以它的选项也非常的多。即使系统中含有网络文件系统(NFS),find命令在该文件系统中同样有效,只要你具有相应的权限。
find指令的命令格式如下:
find pathname -options [-print -exec -ok ...]
它的命令参数有:
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\; 之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
接下来我们就通过图片来看一下find指令的各种命令选项有什么作用
①-name 按照文件名查找文件
我们可以看到在code目录下中有file1的文件,当输入命令find -name file1的命令时,下面就给我们直接找到了这个文件,而因为没有file2这个文件,所以在输入find -name file2的命令时,就什么都不输出。
②-perm指令 按照文件权限来查找文件
输入ll,各文件权限如图,当输入find -perm 755指令时,
输出了以下文件,其中便包含刚才有的权限为755的文件
③-user指令 按文件属主来找文件
输入find -user root ,表示使用者为root的文件如下
④-group指令,按文件所属组来找文件
输入find -group root,表示所属组为root的文件如下
⑤-mtime -n +n指令,按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间在n天以外。find命令还有-atime和-ctime选项,但都和-mtime选项相同。
输入 find -mtime -8指令,表示8天以内被修改过的文件如下
⑥还有-nogroup和-nouesr选项。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/
etc/groups中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/
passwd中不存在。
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的文件。