程序员需要了解的Linux服务器-查找文件-Day2

260 阅读2分钟

这是我参与 8 月更文挑战的第 19 天,活动详情查看: 8月更文挑战

查找文件

  • locate: 搜索包含关键字的所有文件和目录。后接需要查找的文件名,也可以用正则表达式。
    • locate 命令会去文件数据库中查找命令,而不是全磁盘查找,因此刚创建的文件并不会更新到数据库中,所以无法被查找到,可以执行 updatedb 命令去更新数据库。
  • find: find <何处> <何物> <做什么>,用于查找文件,它会去遍历你的实际硬盘进行查找,而且它允许我们对每个找到的文件进行后续操作,功能非常强大。
    • 何处:指定在哪个目录查找,此目录的所有子目录也会被查找。
    • 何物:查找什么,可以根据文件的名字来查找,也可以根据其大小来查找,还可以根据其最近访问时间来查找。
    • 做什么:找到文件后,可以进行后续处理,如果不指定这个参数, find 命令只会显示找到的文件。
// find 命令只会查找完全符合 “何物” 字符串的文件,而 locate 会查找所有包含关键字的文件。
//根据文件名查找
find -name "file.txt"	--> 当前目录以及子目录下通过名称查找文件
find . -name "syslog"	--> 当前目录以及子目录下通过名称查找文件
find / -name "syslog"	--> 整个硬盘下查找syslog
find /var/log -name "syslog"	--> 在指定的目录/var/log下查找syslog文件
find /var/log -name "syslog*"	--> 查找syslog1、syslog2 ... 等文件,通配符表示所有
find /var/log -name "*syslog*"	--> 查找包含syslog的文件 

//根据文件大小查找
find /var -size +10M	--> /var 目录下查找文件大小超过 10M 的文件
find /var -size -50k	--> /var 目录下查找文件大小小于 50k 的文件
find /var -size +1G	--> /var 目录下查找文件大小查过 1G 的文件
find /var -size 1M	--> /var 目录下查找文件大小等于 1M 的文件

// 根据文件最近访问时间查找
find -name "*.txt" -atime -7 	--> 近 7天内访问过的.txt结尾的文件

//仅查找目录或文件
find . -name "file" -type f 	--> 只查找当前目录下的file文件
find . -name "file" -type d 	--> 只查找当前目录下的file目录

// 操作查找结果
find -name "*.txt" -printf "%p - %u\n"	--> 找出所有后缀为txt的文件,并按照 %p - %u\n 格式打印,其中%p=文件名,%u=文件所有者
find -name "*.jpg" -delete	--> 删除当前目录以及子目录下所有.jpg为后缀的文件,不会有删除提示,因此要慎用
find -name "*.c" -exec chmod 600 {} \;	--> 对每个.c结尾的文件,都进行 -exec 参数指定的操作,{} 会被查找到的文件替代,\; 是必须的结尾
find -name "*.c" -ok chmod 600 {} \;	--> 和上面的功能一直,会多一个确认提示