locate 命令,快速查找
find 命令,深入查找
与 locate 命令不同,find 命令不会在文件数据库中查找文件的记录,而是遍历你的实际硬盘。
根据文件名查找
find -name "test.jpg"
-name 参数指定了文件名字,是 test.jpg,用双引号括起来。不加双引号或者用单引号也是可以的。
find /var/log -name "testlog"
何处:/var/log(及它的子目录);
何物:testlog;
没有指定"做什么"参数,因此 find 命令默认显示了查找到的文件。
find /var/log -name "testlog*"
*(星号)来实现匹配多个名称
在整个硬盘里查找
find / -name "testlog"
根据文件大小查找
我们可以查找 /var 中大小超过 10 MB 的文件(当然你要以 root 身份):
find /var -size +10M
表示查找小于 30 K 的文件:
find /var -size -30k
根据文件的最近访问时间查找
近 7 天里在家目录中访问过 JPG 格式的图片:
find -name "*.jpg" -atime -7
-atime 参数后面紧跟的 -7 表示 7 天之内,减号表示小于。
sudo find . -name "new_file" -type d
如果不用 -type 参数指定类型,那么 find 命令默认是同时查找目录和文件的,加上d就只显示目录。
格式化打印查找结果
sudo find . -name "*.jpg" -printf "%p - %u\n"
我们在 -printf 参数后面写了 “%p - %u\n”,这个格式字符串的意思如下:
%p :文件名;
:就是一个短横;
%u :文件的所有者,这里是我的用户名,所以是 oscar;
\n :用于换行。
删除查找到的文件
find -name "*.jpg" -delete
调用命令
使用 -exec 参数,可以后接一个命令,对每个查找到的文件进行操作。
假设我想要将当前目录下所有查找到的 JPG 文件的访问权限都改为 777,那么我们可以这样做:
find -name "*.jpg" -exec chmod 777 {
} \;
就是说对于每个找到的 .jpg 结尾的文件,都进行 -exec 参数指定的操作:
这个操作不必用双引号括起来;
{} 会用查找到的每个文件来替换;
; 是必须的结尾。
这个命令用于定位要查找的文件,而且此命令很快。
查找一个叫做 test_file的文件
locate test_file
刚创建的文件,用 locate 命令查找不到,locate 命令不会对你实际的整个硬盘进行查找,而是在文件的数据库里查找记录。
对于刚创建不久的文件,由于它们还没被收录进文件数据库,因此 locate 命令就找不到其索引,自然就不会返回任何结果。
Linux 系统一般每天会更新一次文件数据库。因此,只要你隔 24 小时再用 locate 查找,应该就能找到你刚创建的文件了。
当然我们也可以用 updatedb 命令强制系统立即更新文件数据库,但是 updatedb 命令只能由 root 用户执行。
sudo updatedb