linux查找当前目录下所有子目录特定文件类型需要查找的文件内容

linux查找当前目录下所有子目录特定文件类型需要查找的文件内容,第1张

1、登录Linux系统之后打开终端,确定你要找关键字的目录。

2、查看下当前目录下所有的文件,你所要找的关键字就在当前目录下某个文件里面。

3、find -type f -print这个命令可以列出当前目录下的所有文件。

4、type后面的f是file的意思,所以只列出文件,而排除文件夹。

5、接下来只要在find命令后面加上exec命令就可以实现。

find 命令的基本结构如下:

find [paths] [expression] [actions]

find 命令接受一个或多个 路径 ( paths )作为搜索范围,并在该路径下 递归 地搜索。即检索完指定的目录后,还会对该目录下的子目录进行检索,以及子目录下的子目录。。。直到到达目录树底部。

默认情况下(不带任何搜索条件),find 命令会返回指定目录下的 所有文件 ,所以常常需要通过特定的 expression 对结果进行 筛选

find 命令默认的 action 是将所有检索结果打印至标准输出。可以通过自定义 action ,让 find 命令对搜索到的结果执行特定的 *** 作。

这里先不做详细解释,简单地测试下 find 命令:

find 命令中的 -name 选项可以根据文件名称进行检索( 区分大小写 )。如需要忽略文件名中的大小写,可以使用 -iname 选项。

-name 和 -iname 两个选项都支持 wildcards 。如:

find /usr -name '*.txt' 查找 /usr 目录下所有文件名以 .txt 结尾的文件

find /usr -name '????' 查找 /usr 目录下所有文件名刚好为 4 个字符的文件

有些时候,你需要在搜索时匹配某个文件或目录的 完整路径 ,而不仅仅是匹配文件名。可以使用 -path 或 -ipath 选项。

如查找 /usr 下所有文件名以 .txt 结尾的文件或目录,且该文件的父目录必须是 src 。可以使用以下命令:

find /usr -path '*/src/*.txt'

如果只想搜索得到文件 目录,即不想它们同时出现在结果中。可以使用 -type 选项指定文件类型。

-type 选项最常用的参数如下:

find /usr -type d -name 'python*' 检索 /usr 下所有文件名以 python 开头的 目录

find 命令支持 -empty 选项用来检索 为空 的文件或目录。空文件即文件里没有任何内容,空目录即目录中没有任何文件或子目录。

find ~ -type d -empty 检索用户主目录下所有的空目录

find 命令也允许用户对当前的匹配条件进行 “反义” (类似于 逻辑非 *** 作)。

如需要检索 /usr 下所有文件名 以 .txt 为后缀的文件。可以使用以下命令:

find /usr -type f ! -name '*.txt'

也可以“翻转”任何其他的筛选条件,如:

find /usr -type f ! -empty 检索 /usr 下所有内容不为空的文件

为了检索归属于特定用户的文件或目录,可以使用 -user 选项。

find / -type f -user starky 检索根目录下所有属主为 starky 的文件

类似于 -user 选项, -group 选项则可以根据文件或目录的 属组 进行检索。

有些时候,需要根据文件创建或修改的时间进行检索。

Linux 系统中,与文件相关联的时间参数有以下三种:

与此对应的是 find 命令中的 -mtime , -atime 和 -ctime 三个选项。

这三个选项的使用遵循以下示例中的规则:

find /usr -type f -mtime 2 检索 /usr 下两天前被修改过的文件

如果觉得 -mtime 等选项以 为单位时间有点长,还可以使用 -mmin , -amin , -cmin 三个选项:

find /usr -type f -mtime +50 -mtime -100 检索 /usr 下 50 到 100 天之前修改过的文件

find /usr -type f -mtime 2 -amin 5 检索 /usr 下两天前被修改过且 5 分钟前又读取过的文件

-size 选项允许用户通过文件大小进行搜索(只适用于文件,目录没有大小……)。

表示文件大小的单位由以下字符组成:

另外,还可以使用 + 或 - 符号表示 大于 小于 当前条件。

find / -size +1G 检索文件大小高于 1 GB 的文件

find 命令可以使用 -perm 选项以文件权限为依据进行搜索。

如需要检索 /usr 目录下权限为 rwxr-xr-x 的文件,可以使用以下命令:

find /usr -perm u=rwx,g=rx,o=rx

搜索 /usr 目录下所有权限为 r-xr-xr-x (即系统中的所有用户都只有读写权限)的文件和目录,可以使用以下命令:

find /usr -perm a=rx

很多时候,我们只想匹配文件权限的一个 子集 。比如,检索可以直接被任何用户执行的文件,即只关心文件的执行权限,而不用管其读写权限是什么。

上述的需求可以通过以下命令实现: find / -type f -perm /a=x

其中 a=x 前面的 / 符号即用来表示只匹配权限的某个子集(执行权限),而不用关心其他权限的具体设置。

-perm 选项也支持数字形式的文件权限标记。

find /usr -perm 644 搜索 /usr 目录下权限为 644 (即 rwxr-xr-x )的文件

find 命令默认是以 递归 的方式检索项目的,这有时候会导致得到的结果数量非常巨大。可以使用 -maxdepth 限制 find 命令递归的层数。

find / -maxdepth 3 搜索时向下递归的层数最大为 3

在之前的例子中有出现多个搜索条件的 组合 以及对某个搜索条件的 反转

实际上 find 命令支持 “and” “or” 两种逻辑运算,对应的命令选项分别是 -a 和 -o 。通过这两个选项可以对搜索条件进行更复杂的组合。

此外还可以使用 小括号 对搜索条件进行 分组 。注意 find 命令中的小括号常需要用 单引号 包裹起来。因小括号在 Shell 中有特殊的含义。

如检索 /usr 下文件名以 python 开头且类型为目录的文件

find /usr -type d -name 'python*'

该命令等同于:

find /usr -type d -a -name 'python*'

更复杂的组合形式如:

find / '(' -mmin -5 -o -mtime +50 ')' -a -type f

-delete 选项可以用来删除搜索到的文件和目录。

如删除 home 目录下所有的空目录:

find ~ -type d -empty -delete

-exec 选项可以对搜索到的结果执行特定的命令。

如需要将 home 目录下所有的 MP3 音频文件复制到移动存储设备(假设路径是 /media/MyDrive ),可使用下面的命令:

find ~ -type f -name '*.mp3' -exec cp {} /media/MyDrive ''

其中的 大括号 ( {} )作为检索到的文件的 占位符 ,而分号( )作为命令结束的标志。因为分号是 Shell 中有特殊含义的符号,所以需要使用单引号括起来。

每当 find 命令检索到一个符合条件的文件,会使用其完整路径取代命令中的 {} ,然后执行 -exec 后面的命令一次。

另一个很重要的用法是,在多个文件中检索某个指定的字符串。

如在用户主目录下的所有文件中检索字符串 hello ,可以使用如下命令:

find ~ -type f -exec grep -l hello {} ''

创建 Gzip 格式的压缩文件的命令为: tar -czvf filename.tar.gz <list of files>

现在假设需要将用户主目录下所有的 MP3 文件添加到压缩包 music.tar.gz 中,直观的感觉是,其命令应为如下形式:

find ~ -type f -name '*.mp3' -exec tar -czvf music.tar.gz {} ''

实际情况是,这样得到的 music.tar.gz 其实只包含一个 MP3 文件。

原因是 find 命令 每次 发现一个音频文件,都会再执行一次 -exec 选项后面的压缩命令。导致先前生成的压缩包被覆盖。

可以先让 find 命令检索出所有符合条件的音频文件,再将得到的 文件列表 传递给后面的压缩命令。完整的命令如下:

find ~ -type f -name '*.mp3' -exec tar -czvf music.tar.gz {} +

如果想浏览搜索到的文件(目录)的详细信息(如权限和大小等),可以直接使用 -ls 选项。

find / -type file -size +1G -ls 浏览所有 1G 以上大小的文件的详细信息

A Guide to the Linux “Find” Command

find 命令手册 : man find

find / -name 文件名\x0d\x0a\x0d\x0aLinux下find命令用法\x0d\x0a\x0d\x0a通过文件名查找法: \x0d\x0a这个方法说起来就和在WINDOWS下查找文件一样容易理解了。如果你把这个文件放在单个的文件夹里面,只要使用常见的“ls"命令就能方便的查找出来,那么使用“find”命令来查找它就不能给你留下深刻的印象,毕竟“find”命令的强大功能不止这 个。如果知道了某个文件的文件名,而不知道这个文件放到哪个文件夹,甚至是层层套嵌的文件夹里。举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录下,甚至在系统的某个地方也不知道,则这是可以使用如下命令: \x0d\x0afind / -name httpd.conf \x0d\x0a\x0d\x0a这个命令语法看起来很容易就明白了,就是直接在find后面写上 -name,表明要求系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会在计算机屏幕上显示出查找结果列表: \x0d\x0aetc/httpd/conf/httpd.conf \x0d\x0a\x0d\x0a这就是httpd.conf这个文件在Linux系统中的完整路径。查找成功。 \x0d\x0a如果输入以上查找命令后系统并没有显示出结 果,那么不要以为系统没有执行find/ -name httpd.conf命令,而可能是你的系统中没有安装Apache服务器,这时只要你安装了Apache Web服务器,然后再使用find / -name httpd.conf就能找到这个配置文件了。 \x0d\x0a\x0d\x0a无错误查找技巧: \x0d\x0a在Linux系统中“find”命令是大多数系统用户都可以使用的命令,并不是ROOT系统管理员的专利。但是普通用户使用“find”命令时也有可能遇到这样的问题,那就是Linux系统中系统管理员ROOT可以把某些文件目录设置成禁止访问模式。这样普通用户就没有权限用“find”命令来查询这些目录或者文件。当普通用户使用“find”命令来 查询这些文件目录是,往往会出现"Permissiondenied."(禁止访问)字样。系统将无法查询到你想要的文件。为了避免这样的错误,我们可是使用转移错误提示的方法尝试着查找文件,输入 \x0d\x0afind / -name access_log 2>/dev/null \x0d\x0a\x0d\x0a这个方法是把查找错误提示转移到特定的目录中去。系统执行这个命令后,遇到错误的信息就直接输送到stderrstream 2 中,access_log 2就是表明系统将把错误信息输送到stderrstream 2中,/dev/null是一个特殊的文件,表明空的或者错误的信息,这样查询到的错误信息将被转移了,不会再显示了。 \x0d\x0a\x0d\x0a在Linux系统查找文件也会遇到这样一个实际问题。如果我们在整个硬盘,这个系统中查找某个文件就要花费相当长的一段时间,特别是大型Linux系统和容量较大的硬 盘,文件放在套嵌很深的目录中的时候。如果我们知道了这个文件存放在某个大的目录中,那么只要在这个目录中往下找就能节省很多时间了。使用find /etc -name httpd.conf 就可以解决这个问题。上面的命令就是表示在etc目录中查询httpd.conf这个文件。这里再说明一下“/ ”这个函数符号的含义,如果输入 “find/ ”就是表示要求Linux系统在整个ROOT目录下查找文件,也就是在整个硬盘上查找文件,而“find/etc”就是只在 etc目录下查找文件。因为“find/etc”表示只在etc目录下查找文件,所以查找的速度就相应要快很多了。 \x0d\x0a\x0d\x0a根据部分文件名查找方法: \x0d\x0a这个方法和在WINDOWS中查找已知的文件名方法是一样的。不过在Linux中根据部分文件名查找文件的方法要比在WINDOWS中的同类查找方法要强大得多。例如我们知道某个文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件是可以实现的,输入: \x0d\x0afind /etc -name '*srm*' \x0d\x0a\x0d\x0a这个命令表明了Linux系统将在/etc整个目录中查找所有的包含有srm这3个字母的文 件,比如 absrmyz, tibc.srm等等符合条件的文件都能显示出来。如果你还知道这个文件是由srm 这3个字母打头的,那么我们还可以省略最前面的星号,命令如下: \x0d\x0afind/etc -name 'srm*' \x0d\x0a\x0d\x0a这是只有像 srmyz 这样的文件才被查找出来,象absrmyz或者 absrm这样的文件都不符合要求,不被显示,这样查找文件的效率和可靠性就大大增强了。 \x0d\x0a\x0d\x0a根据文件的特征查询方法: \x0d\x0a如果只知道某个文件的大小,修改日期等特征也可以使用“find”命令查找出来,这和WINDOWS系统中的"搜索"功 能是基本相同的。在微软的"搜索"中WINDOWS中的"搜索助理"使得搜索文件和文件夹、打印机、用户以及网络中的其他计算机更加容易。它甚至使在 Internet 上搜索更加容易。"搜索助理"还包括一个索引服务,该服务维护了计算机中所有文件的索引,使得搜索速度更快。使用"搜索助理"时,用户可以指定多个搜索标 准。例如,用户可以按名称、类型及大小搜索文件和文件夹。用户甚至可以搜索包含特定文本的文件。如果用户正使用 Active Directory,这时还可以搜索带有特定名称或位置的打印机。 \x0d\x0a\x0d\x0a例如我们知道一个Linux文件大小为1,500 bytes,那么我们可是使用如下命令来查询find / -size 1500c,字符 c 表明这个要查找的文件的大小是以bytes为单位。如果我们连这个文件的具体大小都不知道,那么在Linux中还可以进行模糊查找方式来解决。例如我们输 入find/ -size +10000000c 这个命令,则标明我们指定系统在根目录中查找出大于10000000字节的文件并显示出来。命令中的“+”是表示要求系统只列出大于指定大小的文件,而使 用“-”则表示要求系统列出小于指定大小的文件。下面的列表就是在Linux使用不同“ find"命令后系统所要作出的查找动作,从中我们很容易看出在Linux中使用“find"命令的方式是很多的,“ find"命令查找文件只要灵活应用,丝毫不必在WINDOWS中查找能力差。 \x0d\x0a\x0d\x0afind / -amin -10 # 查找在系统中最后10分钟访问的文件 \x0d\x0afind / -atime -2 # 查找在系统中最后48小时访问的文件 \x0d\x0afind / -empty # 查找在系统中为空的文件或者文件夹 \x0d\x0afind / -group cat # 查找在系统中属于 groupcat的文件 \x0d\x0afind / -mmin -5 # 查找在系统中最后5分钟里修改过的文件 \x0d\x0afind / -mtime -1 #查找在系统中最后24小时里修改过的文件 \x0d\x0afind / -nouser #查找在系统中属于作废用户的文件 \x0d\x0afind / -user fred #查找在系统中属于FRED这个用户的文件 \x0d\x0a\x0d\x0a下面的列表就是对find命令所可以指定文件的特征进行查找的部分条件。在这里并没有列举所有的查找条件,参考有关Linux有关书籍可以知道所有find命令的查找函数。 \x0d\x0a\x0d\x0a-amin n \x0d\x0a查找系统中最后N分钟访问的文件 \x0d\x0a-atime n \x0d\x0a查找系统中最后n*24小时访问的文件 \x0d\x0a-cmin n \x0d\x0a查找系统中最后N分钟被改变状态的文件 \x0d\x0a-ctime n \x0d\x0a查找系统中最后n*24小时被改变状态的文件 \x0d\x0a-empty \x0d\x0a查找系统中 空白的文件,或空白的文件目录,或目录中没有子目录的文件夹 \x0d\x0a-false \x0d\x0a查找系统中总是错误的文件 \x0d\x0a-fstype type\x0d\x0a查找系统中存在于指定文件系统的文件,例如:ext2 . \x0d\x0a-gid n \x0d\x0a查找系统中文件数字组 ID 为 n的文件 \x0d\x0a-group gname \x0d\x0a查找系统中文件属于gnam文件组,并且指定组和ID的文件 \x0d\x0a\x0d\x0aFind命令的控制选项说明: \x0d\x0a\x0d\x0aFind 命令也提供给用户一些特有的选项来控制查找 *** 作。下表就是我们总结出的最基本,最常用的find命令的控制选项及其用法。 \x0d\x0a\x0d\x0a选项 用途描 述 \x0d\x0a-daystart 测试系统从今天开始24小时以内的文件,用法类似-amin \x0d\x0a-depth 使用深度级别的 查找过程方式,在某层指定目录中优先查找文件内容 \x0d\x0a-follow 遵循通配符链接方式查找另外,也可忽略通配符链接方式查询 \x0d\x0a-help 显示命令摘要 \x0d\x0a-maxdepth levels在某个层次的目录中按照递减方法查找 \x0d\x0a-mount 不在文件系统目录中查找,用法类似 -xdev. \x0d\x0a-noleaf 禁止在非UNUX文件系统,MS-DOS系统,CD-ROM文件系统中 进行最优化查找 \x0d\x0a-version 打印版本数字 \x0d\x0a\x0d\x0a使用-follow选项后,find命令则遵循通配符链接方式进行查找,除非你指定这个选项,否则一般情况下find命令将忽略通配符链接方式进行文件查找。 \x0d\x0a\x0d\x0a-maxdepth选项的作用就是限制find命令在目录中按照递减方式查找文件的时候搜索文件超过某个级别或者搜索过多的目录,这样导致查找速度变慢,查找花费的时间过多。例如,我们要在当前(.)目录的子目录中查找一个名叫fred的文件,我们可以使用如下命令 \x0d\x0afind . -maxdepth 2 -name fred \x0d\x0a\x0d\x0a假如这个fred文件在./sub1/fred目录中,那么这个命令就会直接定位这个文件,查找很容易成功。假如,这个文件在./sub1/sub2 /fred目录中,那么这个命令就无法查找到。因为前面已经给find命令在目录中最大的查询目录级别为2,只能查找2层目录下的文件。这样做的目的就是 为了让find命令更加精确的定位文件,如果你已经知道了某个文件大概所在的文件目录级数,那么加入-maxdepth n 就很快的能在指定目录中查找成功。 \x0d\x0a\x0d\x0a使用混合查找方式查找文件 \x0d\x0afind命令可以使用混合查找的方法,例如我们想在/tmp目录 中查找大于100000000字节并且在48小时内修改的某个文件,我们可以使用-and 来把两个查找选项链接起来组合成一个混合的查找方式。 \x0d\x0afind /tmp -size +10000000c -and -mtime +2 \x0d\x0a\x0d\x0a学习过计算机语言的朋友都知道,在计算机语言里,使用 and ,or 分别表示“与”和“或”的关系。在Linux系统的查找命令中一样通用。 \x0d\x0a还有这样的例子, \x0d\x0afind / -user fred -or -user george \x0d\x0a\x0d\x0a我们可以解释为在/tmp目录中查找属于fred或者george这两个用户的文件。 \x0d\x0a在 find命令中还可以使用“非”的关系来查找文件,如果我们要在/tmp目录中查找所有不属于panda的文件,使用一个简单的 \x0d\x0afind /tmp ! -user panda \x0d\x0a命令就可以解决了。很简单。 \x0d\x0a\x0d\x0a查找并显示文件的方法 \x0d\x0a查找到某个文件是我们的目 的,我们更想知道查找到的文件的详细信息和属性,如果我们采取现查找文件,再使用ls命令来查看文件信息是相当繁琐的,现在我们也可以把这两个命令结合起来使用。 \x0d\x0afind / -name "httpd.conf" -ls \x0d\x0a\x0d\x0a系统查找到httpd.conf文件后立即在屏幕上显 示httpd.conf文件信息。 \x0d\x0a12063 34 -rw-r--r-- 1 root root 33545 Dec 30 15:36 /etc/httpd/conf/httpd.conf \x0d\x0a\x0d\x0a下面的表格就是一些常用的查找文件并显示文件信息的参数和使用方法 \x0d\x0a\x0d\x0a选 项用途描述 \x0d\x0a-exec command 查找并执行命令 \x0d\x0a-fprint file 打印文件完整文件名 \x0d\x0a-fprint0 file 打印文件完整文件名包括空的文件 \x0d\x0a-fprintf file format 打印文件格式 \x0d\x0a-ok command 给用户命令执行 *** 作,根据用户的Y 确认输入执行 \x0d\x0a-printf format打印文件格式 \x0d\x0a-ls 打印同种文件格式的文件. \x0d\x0a\x0d\x0a总结:到这里为止我们已经学习了这名多关于find命令的使用 方法,也列出了很多常用的find命令的选项,如果我们能熟练掌握在Linux中find命令的使用方法,那么在Linux中查找文件也不是一件困难的事 情。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7592181.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存