美文网首页
find常用命令示例

find常用命令示例

作者: AlgoPeek | 来源:发表于2019-05-26 15:05 被阅读0次

写在前面

在类unix操作系统中,find命令用于一个或多个目录树中查找文件。本文不会详细介绍find命令的用法,因为man find足以告诉我们这些信息。本文只是我的一个学习笔记,记录一下自己的学习过程及归类总结find的一些常用命令。

用法简述

find命令基本结构:

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

path可以是一个或多个目录,这里最主要的是express,expression可以由options,tests和actions,翻译成人话就是可以按照多个维度自由组合查找条件,再在这些查找出来的文件中执行actions操作。

从查找的维度来说包括:

  • 文件名(可以通过正则匹配)
  • 文件类型
  • 文件大小
  • 时间
  • 组和用户
  • 访问权限
  • 目录层级
  • 符号链接

我们可以按照以上条件自由组合查找目标文件,一旦过滤出这些文件,我们可以执行常用的一些actions:

  • 打印
  • 文件操作(复制、移动、重全名、删除等)
  • 修改文件权限
  • 修改文件用户组

常用实例

1. 在指定目录下查找文件

在根目录下搜索名为passwd的文件:

shell> find / -type f -name 'passwd'

其中,-type表示根据文件类型查找f表示普通文件,更多类型请man find-name表示从文件名进行匹配,后面可以用正则表达式,这里用了最简单的字符串匹配。如果忽略文件名大小写,用-i参数:

shell> find / -type f -iname 'passwd'

2.在指定目录下查找文件大于200M的文件

shell> find / -size +200M

其中-size参数表示从文件大小维度进行查找,后接口文件大小,和单位,默认是块(512 byte),文件大小前可以带+-表示范围大于,小于,不带表示等于。
文件大小单位包括:

单位 说明
b 块,512字节为一块
c 字节
w 双字,2字节为一字
k 千字节,1024字节
M 兆,1024k
G 吉,1024M

3.根据时间查找

根据时间维度查找又可以分为三个子维度条件进行查找,如下:

操作 Meaning 查找参数
访问(access) 读取文件内容时记录的时间 -atime,-amin
修改(modification) 修改文件内容时记录的时间 -mtime,-mmin
修改状态(change of status) 修改文件名或文件属性(权限、拥有者等) -ctime,-cmin

查找15分钟之前修改的文件:

shell> find . -type f -amin +15

查找1天前修改的文件:

shell> find . -type f -atime +1

按照访问时间、修改状态时间查找类似;除此之外还可以以一个文件的基准,查找比这个文件修改时间更新的文件:

shell> find . -type f -newer test.txt

4.根据用户或组维度查找文件

查找属于sedlav的文件

shell> find . -type f -user sedlav 

查找属于mysql组的文件夹:

shell> find /  -type d -group mysql

5.根据访问权限查找文件

权限表示完全跟用户、组、其它用户表示权限的方法一致:

Perm Octal Symbolic
Read 4 r
Write 2 w
Execute 1 x

查拥有者和组用户具有读写权限,其它用户拥有读权限的文件:

shell>find . -type -perm 644

6. 在指定目录层级中查找

可以指定查找的具体的目录层级,或目录层级范围:

参数 说明
-depth levels 目录层级
-maxdepth levels 最小目录层级
-mindepth levels 最大目录层级

从根目录开始,最多查找3层,查找名为passwd的文件:

shell> find / -maxdepth 3 -name 'passwd'

7.过滤错误信息

如果你没有root权限,在/目录下执行上例命令时,你会看到很多错误信息,如何将这些错误信息过滤掉呢?只需要交错误信息重定向到/dev/null中就可以了:

shell> find / -maxdepth 3 -name 'passwd' 2>/dev/null

8. 重命名查找出的文件

根据上面例子中的各种维度,我们可以筛选出目标文件,然后在目录文件上执行actons操作,默认情况下执行的是print,即将目标文件打印出来,除此之外,我们可以使用-exec参数执行更多操作,如:

将当前目录下所有后缀为.php的文件备份到/tmp目录下:

shell>find . -type f -iname '*.php' -exec cp {} /tmp \;

将当前目录下所有的后缀为.htm文件重命名为后缀.html

shell> find . -type f -iname '*.htm' -exec sh -c 'mv {} $(basename {} .htm).html' \;

将当前目录下,所有mp3文件名中的空格(blank)替换为下划线_

shell> find . -type f -iname “*.mp3″ -exec rename “s/ /_/g” {} \;

更多参考

  1. https://en.wikipedia.org/wiki/Find_(Unix)

  2. https://www.librebyte.net/en/bsd/25-practical-examples-of-the-find-command/

3.https://www.thegeekstuff.com/2009/03/15-practical-linux-find-command-examples/

相关文章

网友评论

      本文标题:find常用命令示例

      本文链接:https://www.haomeiwen.com/subject/nxpxtctx.html