<dl id='gvkeh'></dl>
<i id='gvkeh'></i>
  • <tr id='gvkeh'><strong id='gvkeh'></strong><small id='gvkeh'></small><button id='gvkeh'></button><li id='gvkeh'><noscript id='gvkeh'><big id='gvkeh'></big><dt id='gvkeh'></dt></noscript></li></tr><ol id='gvkeh'><table id='gvkeh'><blockquote id='gvkeh'><tbody id='gvkeh'></tbody></blockquote></table></ol><u id='gvkeh'></u><kbd id='gvkeh'><kbd id='gvkeh'></kbd></kbd>

      <code id='gvkeh'><strong id='gvkeh'></strong></code>
      <ins id='gvkeh'></ins>

      1. <i id='gvkeh'><div id='gvkeh'><ins id='gvkeh'></ins></div></i>

          <span id='gvkeh'></span>
            <acronym id='gvkeh'><em id='gvkeh'></em><td id='gvkeh'><div id='gvkeh'></div></td></acronym><address id='gvkeh'><big id='gvkeh'><big id='gvkeh'></big><legend id='gvkeh'></legend></big></address>
            <fieldset id='gvkeh'></fieldset>

            Linux中find命令的用法汇总

            • 时间:
            • 浏览:10
            • 来源: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 翻译  ,略有删改  。思量到原文有个体错误 ,以及为便于读者明白  ,故接纳意译的方式  。不足之处请各人指出  ,谢谢 。