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

news2024/11/17 13:19:09

目录

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"

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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/705736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

五、卷积神经网络

文章目录 前言一、图像卷积1.1 不变性1.2 互相关运算1.3 卷积层1.4 互相关和卷积1.5 特征映射和感受野 二、填充和步幅2.1 填充2.2 步幅 三、多输入多输出通道3.1 多输入通道3.2 多输出通道3.3 11卷积层 四、汇聚层/池化层4.1 最大汇聚层与平均汇聚层4.2 填充和步幅4.3 多个通道…

Linux下安装/使用mariadb

文章目录 第一章:mariadb在rhel7上的使用第二章:mariadb在rhel6上的安装(1)编译源码包(比较慢)(2)二进制包安装(比较推荐) 第一章:mariadb在rhel7…

【Android】Android虚拟机

虚拟机 Android的虚拟机主要有两种:Dalvik 虚拟机和 ART(Android Runtime)虚拟机。 Dalvik 虚拟机 Dalvik 虚拟机是 Android 早期使用的虚拟机,它基于寄存器架构。从Android 2.2版本开始,支持JIT即时编译&#xff08…

计算机系统 基础知识点汇总,超全!!!

计算基础知识点合集来啦!!! 更多知识请关注我!!! 近期内容: 第二章 数据结构与算法 知识点总结第三章 程序设计基础知识点整理第四章 软件工程基础知识点汇总第五章 数据库基础知识pyhon基础知…

JVM 调优设置

堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无…

Python web框架开发 - WSGI协议

目录 浏览器请求动态页面过程 多进程web服务端代码 - 面向过程 封装对象分析 增加识别动态资源请求的功能 为什么需要 WSGI协议 WSGI协议的介绍 定义WSGI接口 编写framwork支持WSGI协议,实现浏览器显示 hello world 本次开发的完整代码如下: 浏…

深度学习 / 数据处理:如何处理偏态数据

1 前言 当我们使用一个线性回归模型时,通常这个模型是在很大假设的前提下才有一个很好的结果: 1、假设预测因子和预测目标之间的关系是线性的2、数据不存在外在噪声:不存在一些极端的数据3、非共线性( collinearity)…

1分钟学会使用docker-compose部署 registry 以及可视化镜像

获取 docker-compose: curl -L https://github.com/docker/compose/releases/download/2.2.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose docekr-compose.yaml: version: 3.3services:registry-ui:image: joxit/docker-registry-ui:mainrestart: always…

appium如何连接多台设备

目录 前言: 1.我们拿两台设备来模拟操作下,使用:adb devices查看连接状况,获取到设备名称。 2.获取需要操作app的包名和页面名称(前提该设备已经打开了app) 3.设置初始配置信息 4.打开页面后操作元素&am…

嵌入式系统的不同方向及优化策略

当涉及到嵌入式系统开发时,可以根据具体的应用需求选择不同的方向进行优化。以下是一些常见的嵌入式系统方向及其特点: 单片机方向:这个方向主要针对使用单片机作为核心的嵌入式系统开发。单片机资源有限,适用于简单的控制任务&am…

基于Java的万年历(课设)

基于Java的万年历 资源链接:基于Java的万年历(课设) 文章目录 基于Java的万年历1 绪论2 需求分析3 概要设计3.1 类间组合框架3.2 布局结构示意3.3 对各个类的概述 4运行环境5 开发工具和编辑语言6 详细设计6.1 NiceCaelendar类6.2 NiceFram…

分享一个优秀的动态数据源开源库-dynamic-datasource-spring-boot-starter

分享一个优秀的动态数据源开源库-dynamic-datasource-spring-boot-starter 1.1 前言1.2 动态数据源开源库简介1.3 特性1.4 用法示例1.4.1 添加依赖1.4.2 配置数据源1.4.3 使用 DS 注解切换数据源 1.5 最佳实践 1.1 前言 在我们的Java后端研发工作中, 有时候由于业务的快速迭代…

Unity 热力图效果实现 笔记

Unity 热力图效果实现 笔记 参考文献连接: 1、人体热力图shader graph实现(URP) 超链接: https://www.youtube.com/watch?vKlMON4Dzq_0&t51s shader forge 翻译通用管线下 连接点实现方案: 2、碰撞热力图实现…

青岛大学_王卓老师【数据结构与算法】Week03_08_线性表的链式表示和实现8_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第…

Python打包工具 Pyinstaller使用教程(将.py以及Python解释器和相关库打包可执行文件)

文章目录 pyinstaller历史背景工作原理使用方法简介使用方法详解(请仔细阅读help文档中文翻译)help文档help文档中文翻译 简单使用示例1. 编译打包2. 拷贝到目标系统3. 运行(遇到问题) 如何使用xxx.spec文件重新编译配置项示例配置…

千字提炼商业智能BI精髓,言简意赅

商业智能BI的发展和数据的增长有很强的关联性,而当前人工智能、大数据、云计算、物联网、互联网等技术和应用都对数据的增长有促进作用,所以商业智能BI也就伴随着数据的增长,在各行各业的企业中开始发挥作用。 商业智能(Business…

uniapp 移动端 后台返回数据流 查看PDF

使用步骤&#xff1a; 1.官网下载地址pdf.js 2.在项目的根目录新建hybrid文件夹&#xff0c;将下载的pdf.js压缩包解压后&#xff0c;复制到hybrid下的html文件夹中 3.在page文件夹下新建一个filePreview.vue页面&#xff0c;页面代码如下&#xff1a; <template><…

C#核心知识回顾——5.结构体和类区别、抽象类和接口、核心知识图解

1.结构体和类区别 结构体和类最大的区别是在存储空间上的&#xff0c;因为结构体是值&#xff0c;类是引用&#xff0c;因此他们的存储位置一个在栈上&#xff0c;一个在堆上。 结构体和类在使用上很类似&#xff0c;结构体甚至可以用面向对象的思想来形容一类对象。 结…

SQL题型:根据逗号拆分列

例1&#xff1a; 表&#xff1a; 要实现的结果&#xff1a; 代码&#xff1a; select a.id as hyId,substring_index(substring_index(a.ch_ry_mc, ,,b.help_topic_id 1 ),,, - 1) AS CH_RY_ID FROM rsgl_hygl_hyxx a JOIN mysql.help_topic b ON b.help_topic_id < ( l…

Acwing.835 Trie字符串统计 (trie数据结构)

题目 维护一个字符串集合&#xff0c;支持两种操作: 1."Ix"向集合中插入一个字符串x; 2."Qx”询问一个字符串在集合中出现了多少次。 共有N个操作&#xff0c;输入的字符串总长度不超过 1 0 5 10^5 105&#xff0c;字符串仅包含小写英文字母。 输入格式 第一…