【Linux】shell中快速遍历所有文件下匹配的内容

这篇具有很好参考价值的文章主要介绍了【Linux】shell中快速遍历所有文件下匹配的内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.举例

2.find命令

2.1. find命令作用

2.2. find命令选项基本格式

2.3. 常用选项

2.4. 常用动作 

2.5. 根据文件名进行匹配 

2.5.2 在/home目录下查找以.txt结尾的文件名 

2.5.3 同上,但忽略大小写 

2.5.4 查找 /home/ 下所有以.txt或.pdf结尾的文件

2.5.5 查找 /home/ 下所有以a开头和以.txt结尾的文件

 2.5.6 搜索/home目录下txt结尾的文件,并将输出到指定文件中(re.txt)

2.6. 根据文件类型进行搜索

2.6.1. f 普通文件

2.6.2.  l 符号连接(软连接)

2.6.3. d 目录

2.6.4. b 块设备

2.6.5. s 套接字

2.7. 基于目录深度搜索 

2.7.1. 向下最大深度限制为3

2.7.2. 搜索出深度距离当前目录至少2个子目录的所有文件 

2.8. 根据文件时间戳进行搜索 

2.8.1. 根据文件时间戳进行搜索

2.8.2. stat 命令查看 

2.8.3. 搜索最近七天内被访问过的所有文件 

2.8.4. 搜索超过七天内(7天外)被访问过的所有文件 

2.9. 根据文件大小进行匹配 

2.9.1. 用法

2.9.2. 文件大小单元 

2.9.3. 搜索大于10KB的文件 

2.9.4. 搜索小于10KB的文件 

2.9.5. 搜索等于10KB的文件 

2.9.6. 搜索大于10G的日志文件,并删除 

2.10. 根据文件权限/所有权进行匹配 

2.10.1. 指定目录下搜索出权限为644的文件

2.10.2. 找出指定目录下权限不是644的txt文件 

2.10.3. 找出/home目录用户frank拥有的所有文件 

2.10.4. 找出/home目录用户组frank拥有的所有文件 

3.xargs命令

3.1. 命令由来

3.2.格式

4.grep命令

5.参考


1.举例

遍历当前目录下所有Makefile文件,找到内容适配CONFIG_SMP的所有Makefile

find -type f -name 'Makefile' | xargs grep "CONFIG_SMP"

linux遍历查找文件,Linux嵌入式系统专栏,服务器,linux,运维

2.find命令

2.1. find命令作用

        find命令用来在指定目录下查找文件。

2.2. find命令选项基本格式

find  目录  -选项  动作[-print -exec -ok ...]

2.3. 常用选项

-a:and 必须满足两个条件才显示
-o:or 只要满足一个条件就显示
-name:按照文件名查找文件
-iname:按照文件名查找文件(忽略大小写)
-type:根据文件类型进行搜索
-perm:按照文件权限来查找文件
-user  按照文件属主来查找文件。
-group  按照文件所属的组来查找文件。
-fprint 文件名:将匹配的文件输出到文件。
-newer file1 ! newer file2  查找更改时间比文件file1新但比文件file2旧的文件

2.4. 常用动作 

-print  默认动作,将匹配的文件输出到标准输出
-exec   对匹配的文件执行该参数所给出的命令。相应命令的形式为 'command' { } \;,注意{ }和\;之间的空格。
-ok     和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
-delete 将匹配到的文件删除

2.5. 根据文件名进行匹配 

命令:find .

[root@host-134 ~]# find .
.
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./anaconda-ks.cfg
./.bash_history
./.mysql_history
./zuoye
./zuoye/lnmp.sh
./zuoye/system.sh
./nginx-1.18.0
./nginx-1.18.0/auto
./nginx-1.18.0/auto/cc
./nginx-1.18.0/auto/cc/acc
./nginx-1.18.0/auto/cc/bcc
......

2.5.2 在/home目录下查找以.txt结尾的文件名 

find /home/ -name "*.txt" 

2.5.3 同上,但忽略大小写 

find /home -iname "*.txt"

2.5.4 查找 /home/ 下所有以.txt或.pdf结尾的文件

  find /home/ -name "*.txt" -o -name "*.pdf"

2.5.5 查找 /home/ 下所有以a开头和以.txt结尾的文件

  find /home/ -name "*.txt" -a -name "a*"

 2.5.6 搜索/home目录下txt结尾的文件,并将输出到指定文件中(re.txt)

 [root@localhost home]# find /home/ -type f -name "*.txt" -fprint /tmp/re.txt 
[root@localhost home]# cat /tmp/re.txt
/home/a.txt
/home/b.txt

2.6. 根据文件类型进行搜索

-type 类型参数

类型参数列
    f 普通文件
    l 符号连接(软连接)
    d 目录
    b 块设备
    s 套接字

2.6.1. f 普通文件

[root@host-136 ~]# find /home/ -type f
/home/frank/.bash_logout
/home/frank/.bash_profile
/home/frank/.bashrc

2.6.2.  l 符号连接(软连接)

[root@host-136 ~]# find /usr/bin/ -type l
/usr/bin/bashbug
/usr/bin/lastb
/usr/bin/sh
/usr/bin/geqn
/usr/bin/ex
/usr/bin/lz4cat
/usr/bin/gneqn
/usr/bin/gnroff

2.6.3. d 目录

[root@host-136 ~]#  find /usr/local/ -type d
/usr/local/
/usr/local/bin
/usr/local/etc
/usr/local/games
/usr/local/include
/usr/local/lib
/usr/local/lib64
/usr/local/libexec
/usr/local/sbin

2.6.4. b 块设备

[root@host-134 ~]# find /dev/ -type b
/dev/dm-1
/dev/dm-0
/dev/sda2
/dev/sda1
/dev/sda
/dev/sr0

2.6.5. s 套接字

[root@localhost home]# find /var/lib/ -type s
/var/lib/mysql/mysql.sock

2.7. 基于目录深度搜索 

2.7.1. 向下最大深度限制为3

[root@host-136 ~]# find /usr/local/ -maxdepth 3 -type d
/usr/local/
/usr/local/bin
/usr/local/etc
/usr/local/games
/usr/local/include
/usr/local/lib
/usr/local/lib64
/usr/local/libexec
/usr/local/sbin
/usr/local/share
/usr/local/share/applications
/usr/local/share/info
/usr/local/share/man
/usr/local/share/man/man1
/usr/local/share/man/man1x

2.7.2. 搜索出深度距离当前目录至少2个子目录的所有文件 

[root@host-136 ~]# find /usr/local/ -mindepth 2 -type f
/usr/local/sbin/mail.py

2.8. 根据文件时间戳进行搜索 

2.8.1. 根据文件时间戳进行搜索

访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间
变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

2.8.2. stat 命令查看 

[root@host-136 ~]# stat /etc/passwd
  File: ‘/etc/passwd’
  Size: 950           Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 33818061    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2021-01-06 09:17:36.122732027 +0800
Modify: 2021-01-06 09:17:36.114732083 +0800
Change: 2021-01-06 09:17:36.115732076 +0800
 Birth: -

2.8.3. 搜索最近七天内被访问过的所有文件 

[root@host-136 ~]# find /etc/ -type f -atime -7
/etc/fstab
/etc/crypttab
/etc/resolv.conf
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
/etc/pki/ca-trust/ca-legacy.conf
/etc/pki/ca-trust/extracted/java/cacerts
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem

2.8.4. 搜索超过七天内(7天外)被访问过的所有文件 

[root@host-136 ~]# find /etc -type f -atime +7
/etc/sasl2/smtpd.conf
/etc/ethertypes
/etc/makedumpfile.conf.sample
/etc/postfix/access
/etc/postfix/canonical
/etc/postfix/generic
/etc/postfix/header_checks
/etc/postfix/relocated
/etc/postfix/transport
/etc/postfix/virtual

2.9. 根据文件大小进行匹配 

2.9.1. 用法

find . -type f  -size 文件大小单元

2.9.2. 文件大小单元 

   b —— 块(512字节)
    c —— 字节
    w —— 字(2字节)
    k —— 千字节
    M —— 兆字节
    G —— 吉字节

2.9.3. 搜索大于10KB的文件 

[root@host-136 ~]# find /etc/ -type f -size +10k
/etc/ssh/moduli
/etc/postfix/access
/etc/postfix/canonical
/etc/postfix/header_checks
/etc/postfix/main.cf
/etc/postfix/transport
/etc/postfix/virtual

2.9.4. 搜索小于10KB的文件 

[root@host-136 ~]# find /etc/ -type f -size -10k
/etc/man_db.conf
/etc/sudo-ldap.conf
/etc/sudo.conf
/etc/sudoers
/etc/e2fsck.conf
/etc/mke2fs.conf
/etc/vconsole.conf
/etc/locale.conf

2.9.5. 搜索等于10KB的文件 

[root@host-136 ~]# find /etc/ -type f -size 10k
/etc/dbus-1/system.d/org.freedesktop.systemd1.conf
/etc/dbus-1/system.d/org.freedesktop.NetworkManager.conf
/etc/selinux/targeted/active/modules/100/accountsd/hll
/etc/selinux/targeted/active/modules/100/acct/hll
/etc/selinux/targeted/active/modules/100/aiccu/hll
/etc/selinux/targeted/active/modules/100/alsa/hll
/etc/selinux/targeted/active/modules/100/arpwatch/hll

2.9.6. 搜索大于10G的日志文件,并删除 

[root@host-136 ~]# find /var/log -type f -name "*.log" -size +10G -delete

2.10. 根据文件权限/所有权进行匹配 

2.10.1. 指定目录下搜索出权限为644的文件

[root@host-136 ~]# find / -type f -perm 644
/usr/libexec/sudo/libsudo_util.so.0.0.0
/usr/libexec/sudo/sudo_noexec.so
/usr/libexec/sudo/sudoers.so
/usr/libexec/sudo/system_group.so

2.10.2. 找出指定目录下权限不是644的txt文件 

[root@host-136 ~]# find / -type f -name "*.txt" ! -perm 644
/usr/lib/firmware/ivtv-firmware-license-end-user.txt
/usr/lib/firmware/ivtv-firmware-license-oemihvisv.txt
/usr/share/licenses/shadow-utils-4.6/gpl-2.0.txt
/usr/share/licenses/shadow-utils-4.6/shadow-bsd.txt

2.10.3. 找出/home目录用户frank拥有的所有文件 

[root@host-136 ~]# find /home/ -type f -user frank
/home/frank/.bash_logout
/home/frank/.bash_profile
/home/frank/.bashrc

2.10.4. 找出/home目录用户组frank拥有的所有文件 

[root@host-136 ~]# find /home/ -type f -group frank
/home/frank/.bash_logout
/home/frank/.bash_profile
/home/frank/.bashrc 

3.xargs命令

3.1. 命令由来


        xargs (英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。之所以能用到这个命令,主要是由于很多命令不支持管道符号 | 来传递参数,而日常工作中经常有这个必要,所以就有了 xargs 命令,例如:

如果想要通过一条命令,先使用 find 命令获取 /etc 目录下所有的 passwd 文件,最后使用 ls -l 获取文件的详细信息,你可能一开始会使用类似下列格式的命令:
 

[root@centos ~]# find /etc -name passwd
/etc/pam.d/passwd
/etc/passwd
[root@centos ~]# find /etc -name passwd | ls -l
total 0

可以看到,此时并没有按照我们的期望输出结果,此时使用 xargs 命令可以解决该问题

[root@centos ~]# find /etc -name passwd | xargs ls -l
-rw-r--r--. 1 root root  168 Apr  7  2020 /etc/pam.d/passwd
-rw-r--r--  1 root root 1541 May 21 11:32 /etc/passwd

 实际上,在 Linux 的 Shell 命令中,诸如 mkdir 、 cat 、 rm 等命令都不支持直接将管道符的输出当做输入进而作为他们的操作对象来使用。

3.2.格式

xargs [ option ] ... [ command [ initial-arguments ] ... ]

关于如何阅读 Linux 的 man 手册,请见【Linux入门学习笔记】Linux命令查阅方法及文件操作命令简介。

4.grep命令

5.参考

find命令详解_新秀后浪的博客-CSDN博客

(1条消息) grep命令详解_运维朱工的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-722728.html

到了这里,关于【Linux】shell中快速遍历所有文件下匹配的内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 快速上手Linux核心命令(四):文件内容相关命令

    目录 前言 cat 合并文件或查看文件内容 more 分页显示文件内容 less 分页显示文件内容 head 显示文件内容头部 tail 显示文件内容尾部 tailf 跟踪日志文件 diff 比较两个文件的不同 vimdiff 可视化比较工具 wc 统计文件的的行数、单词数或字节数 sort 文本排序 uniq 去除重复行 join 按两

    2023年04月25日
    浏览(40)
  • 在linux里如果日志文件过大,如何快速查询内容?

    在 Linux 中,如果日志文件过大,可能会导致查询内容变得困难和缓慢。以下是一些可以帮助您快速查询大型日志文件内容的方法: 使用 grep 命令: grep 是一个强大的文本搜索工具,可以在文件中快速搜索指定的或模式。例如,如果您希望在名为 logfile.log 的文件中搜索

    2024年02月08日
    浏览(58)
  • Linux中的shell脚本之流程控制&&循环遍历

    3 条件判断 4 流程控制语句 1)if 语句 案例,用户输入用户名和密码,判断用户名是否是admin,密码是否是123,如果正确,则显示登录成功 首先我创建了shell文件,touch getpawer 其中getpawer 是我自己命的名 效果展示如下: 2)case语句:用case语句匹配一个值与一个模式,如果匹配成

    2024年04月16日
    浏览(47)
  • Linux shell编程学习笔记44:编写一个脚本,将md5sum命令执行结果保存到变量中,进而比较两个文件内容是否相同

    在  Linux shell编程学习笔记42:md5sum https://blog.csdn.net/Purpleendurer/article/details/137125672?spm=1001.2014.3001.5501 中,我们提到编写一个在Linux系统下比较两个文件内容是否相同的脚本。 基本思路是: 其中有两个难点: 1.文件的md5值的获取 2.md5值的比较 对于第1个难点,我们的解决办法是

    2024年04月10日
    浏览(75)
  • linux shell快速入门

    一安装linux的虚拟环境 查看是否具备执行权限 新增执行权限 执行hello.sh文件 hello world

    2024年02月12日
    浏览(39)
  • Linux学习笔记——修改文件的所有者和所有组

    Linux chown (英文全拼: change owner )命令用于设置文件所有者和文件关联组的命令。 Linux/Unix 是多人多工操作系统,所有的文件皆有拥有者。利用 chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改

    2024年02月16日
    浏览(40)
  • linux 查看文件/grep字符串匹配命令

    cat 用于连接文件并打印到标准输出。可以用 cat 命令将多个文件合并成一个文件,也可以用它来查看单个文件的内容。常用的选项包括 -n (显示行号)和 -b (显示非空行号) ,例如 cat -n file.txt 可以显示文件的内容,并在每行开头显示行号。 more 用于分页显示文本文件的内

    2024年02月07日
    浏览(50)
  • Shell命令操作Linux文件系统

      Linux文件系统是计算机操作系统中的一个关键组成部分,它用于管理和组织计算机上的数据和信息。先到根目录,然后打印当前目录下文件:   有一些比较常用的文件夹介绍如下:    /bin ——包含常见Linux 用户命令,比如 ls、sort、date和l chmod。    /home ——包含分

    2024年02月09日
    浏览(40)
  • Linux shell操作.csv文件

    使用Shell处理CSV文件时,可以借助以下命令和技巧来进行常见的操作: 读取CSV文件:使用 cat 命令结合重定向符号( 、 )或管道( | )来读取CSV文件的内容。 提取特定列:使用 cut 命令可以提取CSV文件中的特定列。 过滤行:使用 grep 命令可以根据某些条件筛选CSV文件中的行

    2024年02月09日
    浏览(29)
  • 【Linux | Shell】Linux 安全系统 —— 用户、组、文件权限 - 阅读笔记

    Linux 安全系统的核心是 用户账户 。 用户权限是通过创建用户时分配的用户 ID( user ID, UID)来跟踪的。 UID 是个数值,每个用户都有一个唯一的 UID。 用户在登录系统时是使用登录名( login name)来代替 UID 登录的。 下面介绍 Linux 系统使用哪些 特定文件和工具 来跟踪及管理

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包