1. <i id='c7k53'><div id='c7k53'><ins id='c7k53'></ins></div></i>
      <i id='c7k53'></i>
      <acronym id='c7k53'><em id='c7k53'></em><td id='c7k53'><div id='c7k53'></div></td></acronym><address id='c7k53'><big id='c7k53'><big id='c7k53'></big><legend id='c7k53'></legend></big></address>

      <code id='c7k53'><strong id='c7k53'></strong></code>

      <fieldset id='c7k53'></fieldset>
      <ins id='c7k53'></ins>
      1. <tr id='c7k53'><strong id='c7k53'></strong><small id='c7k53'></small><button id='c7k53'></button><li id='c7k53'><noscript id='c7k53'><big id='c7k53'></big><dt id='c7k53'></dt></noscript></li></tr><ol id='c7k53'><table id='c7k53'><blockquote id='c7k53'><tbody id='c7k53'></tbody></blockquote></table></ol><u id='c7k53'></u><kbd id='c7k53'><kbd id='c7k53'></kbd></kbd>
      2. <dl id='c7k53'></dl>
          <span id='c7k53'></span>

          Linux中find命令的用法汇总

          • 时间:
          • 浏览:6
          • 来源:124软件资讯网

              Linux系统中的 find 下令在查找文件时很是有用而且利便  。它可以凭据差别的条件来查找文件 ,例如权限、拥有者、修他日期/时间、文件巨细等等  。在这篇文章中 ,我们将学习怎样使用 find 下令以及它所提供的选项来查找文件  。

              在绝大多数Linux刊行版中  ,你都可以直接使用 find 下令而无需举行任何安装操作  。若是你想在linux系统的下令行中变得特殊高效  ,那么 find 是你必须掌握的下令之一  。

              find 下令的基本语法如下:

              $ find [path] [option] [expression]

              一、基本用法

              1. 列出当前目录和子目录下的所有文件

              这个下令会列出当前目录以及子目录下的所有文件  。

              $ find

              .

              ./abc.txt

              ./subdir

              ./subdir/how.php

              ./cool.php

              该下令与以下下令效果相同

              $ find .

              $ find . -print

              2. 查找特殊的目录或路径

              下面的下令会查找当前目录下 test 文件夹中的文件  ,默认列出所有文件  。

              $ find ./test

              ./test

              ./test/abc.txt

              ./test/subdir

              ./test/subdir/how.php

              ./test/cool.php

              下面的下令用于查找指命名称的文件  。

              $ find ./test -name "abc.txt"

              ./test/abc.txt

              也可以使用通配符

              $ find ./test -name "*.php"

              ./test/subdir/how.php

              ./test/cool.php

              请注重 ,所有的文件夹都市被递归地查找 。以是  ,这是用于查找指定扩展名文件的一种很是强盛的方式  。

              若是我们实验搜索 / 文件夹  ,也就是根目录 ,就会搜索整个文件系统  ,包罗挂载的装备以及网络存储装备  。以是请小心使用  。固然 ,你随时可以通过按 Ctrl + C 来终止下令  。

              注重:当指定文件夹的时间(例如示例中的"./test"文件夹) ,忽略末尾的斜杠是没有问题的  。可是  ,若是文件夹是一个指向其它位置的链接(symlink)时  ,你必须在末尾写上斜杠才气使find下令正常事情(find ./test/)  。

              忽略巨细写

              在查找文件名时  ,忽略巨细写往往很是有用 。要忽略巨细写  ,只需要使用 iname 选项 ,而不是 name 选项  。

              $ find ./test -iname "*.Php"

              ./test/subdir/how.php

              ./test/cool.php

              总是用双引号或单引号来困绕匹配模式(文件名参数)  ,这很是有用  。不这样做的话有时也能正常事情  ,有时也可能会发生希奇的效果  。

              3. 限制目录查找的深度

              find 下令默认会递归查找整个目录树  ,而这很是消耗时间和资源  。幸亏目录查找的深度可以手动指定 。例如我们只想查找一到两层以内的子目录 ,可以通过 maxdepth 选项来指定  。

              $ find ./test -maxdepth 2 -name "*.php"

              ./test/subdir/how.php

              ./test/cool.php

              $ find ./test -maxdepth 1 -name *.php

              ./test/cool.php

              第二个示例中指定了 maxdepth 为1  ,讲明最多只查找一层内的子目录  ,也就是只查找当前文件夹 。

              当我们只想在当前目录下查找  ,而不是查找整个目录树的时间 ,这个选项会特殊有用 。

              与 maxdepth 选项相似  ,另有一个选项叫做 mindepth  ,正如名字所表现的那样  ,它会至少到达第 N 层子目录后才最先查找文件  。

              4. 反向查找

              除了查找知足条件的文件之外  ,我们还可以查找不知足条件的所有文件  。当我们知道要在查找中清除哪些文件时  ,这个选项就能施展作用了  。

              $ find ./test -not -name "*.php"

              ./test

              ./test/abc.txt

              ./test/subdir

              在上面的示例中我们找到了所有扩展名不是 php 的文件和文件夹  。我们也可以使用叹息号 ! 来取代 -not  。

              find ./test ! -name "*.php"

              5. 联合多个查找条件

              我们可以同时使用多个查找条件来指定文件名并清除某些文件 。

              $ find ./test -name 'abc*' ! -name '*.php'

              ./test/abc.txt

              ./test/abc

              上面的下令查找所有以 abc 开头而且不含 .php 扩展名的文件  。这个示例展现了 find 下令自带的查找表达式是何等的强盛  。

              OR 操作符

              当我们使用多个查找条件时  , find 下令会将它们通过 AND 操作符联合起来  ,也就是说  ,只有知足所有条件的文件才会被列出 。不外  ,若是我们需要举行基于 OR 运算的查找时  ,可以加上 -o 开关  。

              $ find -name '*.php' -o -name '*.txt'

              ./abc.txt

              ./subdir/how.php

              ./abc.php

              ./cool.php

              上面的下令查找所有以 .php 末端或者以 .txt 末端的文件 。

              6. 只查找文件或目录

              有时我们只想通过某个名字查找对应的文件或对应的目录  ,我们可以很容易实现这个要求  。

              $ find ./test -name abc*

              ./test/abc.txt

              ./test/abc

              只查找文件

              $ find ./test -type f -name "abc*"

              ./test/abc.txt

              只查找目录

              $ find ./test -type d -name "abc*"

              ./test/abc

              很是有用而且利便!

              7. 同时在多个目录下查找

              若是你想要在两个差别的目录内举行查找  ,下令很是简朴  。

              $ find ./test ./dir2 -type f -name "abc*"

              ./test/abc.txt

              ./dir2/abcdefg.txt

              检查一下 ,它确实列出了来自给定的两个目录的文件  。

              8. 查找隐藏文件

              在Linux系统中 ,隐藏文件的名字以英文的句号开头  ,即 .  。以是要列出隐藏文件 ,只需加上简朴的文件名过滤条件就行了  。

              $ find ~ -type f -name ".*"

              二、基于文件权限和属性的查找

              9. 查找指定权限的文件

              通过指定 perm 选项  ,我们可以查找具有特定权限的文件 。下面的示例中查找了所有具有 0664 权限的文件  。

              $ find . -type f -perm 0664

              ./abc.txt

              ./subdir/how.php

              ./abc.php

              ./cool.php

              我们可以用这个下令来查找带有错误权限的文件 ,这些文件可能会发生宁静问题  。

              可以联合 反向查找 来举行权限检查  。

              $ find . -type f ! -perm 0777

              ./abc.txt

              ./subdir/how.php

              ./abc.php

              ./cool.php

              10. 查找具有 SGID/SUID 属性的文件

              下面的下令查找所有具有 644 权限和 SGID 属性的文件  。

              # find / -perm 2644

              我们同样可以使用 1664 来查找设置了 粘滞位 (sticky bit)的文件  。

              # find / -perm 1644

              perm 选项除了接受数值型参数外  ,同样接受 chmod 下令中的模式串  。在下面的查找中  ,我们用另一种语法来取代数字 。

              $ find / -maxdepth 2 -perm /u=s 2>/dev/null

              /bin/mount

              /bin/su

              /bin/ping6

              /bin/fusermount

              /bin/ping

              /bin/umount

              /sbin/mount.ecryptfs_private

              注重:由于权限不足  ,某些目录会拒接会见  。下令中的 2>/dev/null 正是用于扫除输出中的错误会见效果  。

              11. 查找只读文件

              $ find /etc -maxdepth 1 -perm /u=r

              /etc

              /etc/thunderbird

              /etc/brltty

              /etc/dkms

              /etc/phpmyadmin

              ... output truncated ...

              12. 查找可执行文件

              $ find /bin -maxdepth 2 -perm /a=x

              /bin

              /bin/preseed_command

              /bin/mount

              /bin/zfgrep

              /bin/tempfile

              ... output truncated ...

              三、基于文件拥有者和用户组的查找

              13. 查找属于特定用户的文件

              查找当前目录下  ,属于 bob 的文件 。

              $ find . -user bob

              .

              ./abc.txt

              ./abc

              ./subdir

              ./subdir/how.php

              ./abc.php

              在指定所属用户的同时  ,我们同样可以指定文件名  。

              $ find . -user bob -name '*.php'

              很容易看出 ,我们可以通过增添过滤条件来缩小查找文件的规模  。

              14. 查找属于特定用户组的文件

              # find /var/www -group developer

              四、基于日期和时间的查找

              除了上面先容的查找条件外  ,另外一个很是棒的查找条件就是文件的修改和会见时间(日期)  。当我们想要找出哪些文件在某段时间内被修改的时间  ,这个查找条件将会很是利便 。我们来看几个例子  。

              15. 查找已往的第 N 天被修悔改的文件

              # find / -mtime 50

              16. 查找已往的 N 天内被会见过的文件

              # find / -atime -50

              17. 查找某段时间规模内被修悔改内容的文件

              # find / -mtime +50 -mtime -100

              18. 查找已往的 N 分钟内状态发生改变的文件

              $ find /home/bob -cmin -60

              19. 查找已往的 1 小时内被修悔改内容的文件

              # find / -mmin -60

              20. 查找已往的 1 小时内被会见过的文件

              # find / -amin -60

              五、基于文件巨细的查找

              21. 查找指定巨细的文件

              $ find / -size 50M

              22. 查找巨细在一定规模内的文件

              $ find / -size +50M -size -100M

              23. 查找最大和最小的文件

              我们可以将 find 下令与 ls 和 sort下令联合  ,从而找出最大或最小的文件  。

              下面的下令使用了 sort 下令的 -r 选项  ,也就是从大到小降序排列 。经由 head 下令的过滤之后  ,会显示当前目录和子目录下最大的5个文件 。下令的执行历程需要一段时间 ,查找的速率取决于文件的总数  。

              $ find . -type f -exec ls -s {} \; | sort -n -r | head 5

              同样  ,我们可以去掉 sort 下令的 -r 选项来举行升序排列 ,从而显示出最小的5个文件 。

              $ find . -type f -exec ls -s {} \; | sort -n | head 5

              24. 查找空文件和空目录

              查找空文件:

              # find /tmp -type f -empty

              查找空目录:

              $ find ~/ -type d -empty

              很是简朴!

              六、高级操作

              find 下令不仅可以通过特定条件来查找文件  ,还可以对查找到的文件使用恣意linux下令举行操作  。下面给出两个例子  。

              25. 使用 ls 下令列出文件信息

              我们使用 find 下令找到文件后  ,只能看到文件路径 。若是想进一步检察文件信息 ,可以联合 ls 下令来实现  。

              $ find . -exec ls -ld {} \;

              drwxrwxr-x 4 enlightened enlightened 4096 Aug 11 19:01 .

              -rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./abc.txt

              drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:48 ./abc

              drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:26 ./subdir

              -rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:26 ./subdir/how.php

              -rw-rw-r-- 1 enlightened enlightened 29 Aug 11 19:13 ./abc.php

              -rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./cool.php

              26. 删除找到的文件

              下面的下令会删除 tmp 目录下扩展名为 .txt 的文件  。

              $ find /tmp -type f -name "*.txt" -exec rm -f {} \;

              我们同样可以删除目录  ,只要把 -type 后面的 f 改为 d  ,而且在 rm 下令后面加上 -r 即可  。

              $ find /tmp -type d -name "dirToRemove" -exec rm -r -f {} \;

              本文由 Wray 翻译 ,略有删改 。思量到原文有个体错误  ,以及为便于读者明白  ,故接纳意译的方式 。不足之处请各人指出  ,谢谢  。