学习啦 > 学习电脑 > 操作系统 > Linux教程 > 如何快速学习find命令

如何快速学习find命令

时间: 春健736 分享

如何快速学习find命令

  每一种操作系统都有成千上万的文件组成,对于linux这样“一切皆文件”的操作系统来说更不例外,大家应该都能很轻松使用windows下的文件查找功能,下面跟着学习啦小编一起来了解一下如何快速学习find命令吧。

  如何快速学习find命令

  让我们先从一个简单例子开始。

  $ find / -name test

  。/backup/ modules/field/modules/test

  $

  “查找根目录下名称为’test’的文件”, 这条命令会让系统查找所有文件, 包括挂载的文件设备。 这可能需要花费一段时间, 尤其是查找网络共享硬盘。 不过, 我们可以通过参数-mount告诉, 系统忽略挂载设备:

  $ find / -mount -name test

  find命令格式如下:

  find [path] [options] [tests] [actions]

  [path]

  路径; 应该不难理解。 这里可以使用绝对路径, 也快成使用相对路径。

  [options]

  参数; 比较常用的参数用:

  -depth: 先查找子目录再查看当前目录 -follow: 跟踪查找连接文件 -maxdepths N: 子目录递归最大深度 -mount(or -xdev): 忽略挂载文件

  [tests]

  条件匹配;

  -atime -N/N/+N: 最后一次访问文件的时间在 N天内/N天/N天前 -mtime -N/N/+N: 最后一次修改文件的时间在 N天内/N天/N天前 -name pattern: 与pattern相匹配的文件(包括目录) -newer f1 !f2: 比文件f1新的文件, 比文件f2旧的文件 -type b/d/c/p/l/f: 文件类型为: 块设备/目录/字符设备/管道/链接/文件 -user username: 文件的所有者是username

  我们可以通过以下操作符, 将匹配条件 连起来:

  -not (!): 方向匹配 -and (-a): 而且 -or (-o): 或者

  我们还可以通过括号将一些匹配符号合并。 例如

  \(-newer -o -name ‘*test’ \)

  现在举一个稍微有点复杂的例子, 查找当天被访问过或修改过的文件, 文件名包含’python’, 而起文件所有者是’anthony’:

  # find / \( -atime -1 -or -mtime -1 \) -and -name ‘*python*’ -and -user ‘anthony’

  /home/anthony/svn_code/subversion-1.7.2/subversion/bindings/swig/python

  /home/anthony/svn_code/subversion-1.7.2/subversion/bindings/ctypes-python

  /home/anthony/python

  /home/anthony/python/Python-3.2.2/build/temp.linux-x86_64-3.2/home/anthony/python

  /home/anthony/python/Python-3.2.2/Tools/unicode/python-mappings

  /home/anthony/.local/lib/python3.2

  #

  [actions]

  操作;

  -exec command: 执行命令, 具体介绍见后文。 -ok command: 和-exec一样, 除了命令执行需要用户许可。 -print: 打印文件名 -ls: 列出文件详细信息

  现在举例说明-exec command

  anthony@z:~$ find -mtime -1 -type f -exec ls -l {} \;

  -rw-r--r-- 1 anthony anthony 0 Apr 5 12:04 。/search/search.txt

  -rw------- 1 anthony anthony 22997 Apr 5 12:04 。/.viminfo

  -rw------- 1 anthony anthony 125 Apr 5 14:25 。/.lesshst

  anthony@z:~$

  简单地说, -exec或-ok, 将查询到的文件作为参数传递给后面的命令执行, 而参数的位置用{}标识, 即命令中, “{}”替换成find查找出来的文件名, 最后”\;”表示结束符。

  find . -type f -exec ls -l {} \;

  从当前文件夹中查找普通文件,并且对每个匹配的文件执行“ls -l {}”操作;

  -type表示按照文件类型来查找文件:

  b - 块设备文件。

  d - 目录。

  c - 字符设备文件。

  p - 管道文件。

  l - 符号链接文件。

  f - 普通文件。

  find logs -type f -mtime +5 -exec rm {} \;

  从logs文件夹中查找最后修改日期在5天前的文件,并且删除它们;

  -mtime:Modify Time

  -atime: Access Time

  -ctime: Create Time

  find /etc -name "passwd*" -exec grep "sam" {} \;

  从/etc文件夹中查找文件名以“passwd”开头的所有文件中,是否有“sam”字符串;

  -name 后面的表达式不是正则表达式,而是通配符,“*.txt”,"*[lL]inux*"等等。

  主要选项:

  -name:按照文件名查找文件。

  -perm:按照文件权限来查找文件。

  -prune:使用这一选项可以使f i n d命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被f i n d命令忽略。

  -user: 按照文件属主来查找文件。

  -group:按照文件所属的组来查找文件。

  -mtime -n +n:按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。F i n d命令还有- a t i m e和- c t i m e选项,但它们都和- m t i m e选项。

  -nogroup:查找无有效所属组的文件,即该文件所属的组在/ e t c / g r o u p s中不存在。

  -nouser:查找无有效属主的文件,即该文件的属主在/ e t c / p a s s w d中不存在。

  -newer file1 ! file2:查找更改时间比文件f i l e 1新但比文件f i l e 2旧的文件。

  -type 查找某一类型的文件

  -size 按文件大小查找,+100c,表示大于100字节,-10,表示小于10块(1块为512字节)

  上面就是Linux find命令的介绍了,从例子中学习find命令效果会比看理论知识会好的多,对于初学者来说,多看例子多动手是很有必要的。

648738