文件查找和打包压缩【1.7】

news2024/12/25 9:23:08

文件查找和打包压缩【1.7】

  • 八、文件查找和打包压缩
    • 8.1 文件查找
      • 8.1.1 locate
      • 8.1.2 find
        • find
        • 8.1.2.1 指定搜索目录层级
        • 8.1.2.2 先处理文件再处理目录
        • 8.1.2.3 根据文件名和inode查找
        • 8.1.2.4 根据属主属组查找
        • 8.1.2.5 根据文件类型查找
        • 8.1.2.6 空文件或目录
        • 8.1.2.7 组合条件
        • 8.1.2.8 排除目录
        • 8.1.2.9 根据文件大小来查找
        • 8.1.2.10 根据时间戳
        • 8.1.2.11 根据权限查找
        • 8.1.2.12 正则表达式
        • 8.1.2.13 处理动作
      • 8.1.3 参数替换 xargs
      • xargs 动态生成参数
    • 8.2 压缩和解压缩
      • 8.2.1 compress 和 uncompress
      • 8.2.2 gzip和gunzip
      • 8.2.3 bzip2和bunzip2
      • 8.2.4 xz 和 unxz
      • 8.2.5 zip 和 unzip
      • 8.2.6 zcat
      • 8.2.7 压缩率比较
    • 8.3 打包和解包tar
      • 8.3.1 tar
      • 8.3.2 split
  • endl

八、文件查找和打包压缩

  • 内容概述
    • locate
    • find
    • xargs
    • compress和uncompress
    • gzip和gunzip
    • bzip2和bunzip2
    • xz和unxz
    • zip和unzip
    • tar

8.1 文件查找

  • 在文件系统上查找符合条件的文件
  • 文件查找:
    • 非实时查找(数据库查找):locate
    • 实时查找:find

8.1.1 locate

  • locate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db

  • 索引的构建是在系统较为空闲时自动进行(周期任务),执行updatedb可以更新数据库

  • 索引构建过程需要遍历整个根文件系统,很消耗资源

  • locate和update命令来自于mlocate包

  • 工作特点:

    • 查找速度快
    • 模糊查找
    • 非实时查找
    • 搜索的是文件全路径,不仅仅是文件名
    • 可能只搜索用户具备读取和执行权限的目录
  • 如果没有程序,可先安装

#rehl系列
yum install -y mlocate
#ubuntu
apt install -y Plocate
  • 格式
locate [OPTION]... [PATTERN]...
常用选项 含义
-A|–all 输出所有能匹配到的文件名,不管文件是否存在
-b|–basename 仅匹配文件名部份,而不匹配路径中的内容
-c|–count 只输出找到的数量
-d|–database DBPATH 指定数据库
-e|–existing 仅打印当前现有文件的条目
-L|–follow 遇到软链接时则跟随软链接去其对应的目标文件中查找 (默认)
-i|–ignore-case 忽略大小写
-l|–limit|-n N 只显示前N条匹配数据
-P|–nofollow, -H 不跟随软链
-r|–regexp REGEXP 使用基本正则表达式
–regex 使用扩展正则表达式
-s|–stdio 忽略向后兼容
-w|–wholename 全路径匹配,就是只要在路径里面出现关键字(默认)
  • 范例:locatedb创建数据库
[root@ubuntu2204 ~]# apt install mlocate -y

[root@ubuntu2204 ~]# locate conf
/var/lib/plocate/plocate.db: No such file or directory

[root@ubuntu2204 ~]# updatedb

[root@ubuntu2204 ~]# ll /var/lib/plocate/plocate.db
-rw-r----- 1 root plocate 3142215 May 10 12:17 /var/lib/plocate/plocate.db

[root@ubuntu2204 ~]# locate -n 3 conf
/boot/config-5.15.0-25-generic
/boot/config-5.15.0-71-generic
/boot/grub/i386-pc/configfile.mod

[root@rocky8 ~]# dnf -y install mlocate
[root@rocky86 ~]# locate conf
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory

[root@rocky8 ~]# updatedb
[root@rocky8 ~]# ll /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 3143608 Jun 18 08:58 /var/lib/mlocate/mlocate.db

[root@rocky8 ~]# locate -n 3 conf
/boot/config-4.18.0-348.el8.0.2.x86_64
/boot/grub2/i386-pc/configfile.mod
/boot/loader/entries/c0298860b41f4cd296da0d2853451604-0-rescue.conf
  • 范例:文件新创建和删除,无法马上更新locate数据库
[root@ubuntu2204 ~]# touch test.log
[root@ubuntu2204 ~]# locate test.log

#更新数据库之后再查找
[root@ubuntu2204 ~]# updatedb
[root@ubuntu2204 ~]# locate test.log
/root/test.log

#文件被删除,还能查到
[root@ubuntu2204 ~]# rm -f test.log
[root@ubuntu2204 ~]# locate test.log
/root/test.log

#但实际上文件己经不存在了
[root@ubuntu2204 ~]# stat /root/test.log
stat: cannot statx '/root/test.log': No such file or directory

#再次更新数据库
[root@ubuntu2204 ~]# updatedb
[root@ubuntu2204 ~]# locate test.log
  • 范例:
#搜索名称或路径中包含“conf”的文件
[root@ubuntu2204 ~]# locate conf

#搜索ect目录中以a开头的文件或目录,路径包含写法
[root@ubuntu2204 ~]# locate /etc/a

#仅搜索文件名中包含share 的内容
[root@ubuntu2204 ~]# locate -b share

#显示数量
[root@ubuntu2204 ~]# locate -c conf

#显示前10[root@ubuntu2204 ~]# locate -n 10 conf

#使用基本正则表达式
[root@ubuntu2204 ~]# locate -r '\.conf$'

#指定数据库
[root@ubuntu2204 ~]# locate -d /tmp/nofile conf
locate: can not stat () `/tmp/nofile': No such file or directory

#安静模式,不输出错误信息,新版本中没有 -q 选项
[root@ubuntu2204 ~]# locate -qd /tmp/nofile conf

8.1.2 find

  • find 是实时查找工具,通过遍历指定路径完成文件查找;
  • 工作特点:
    • 查找速度略慢
    • 精确查找
    • 实时查找
    • 查找条件丰富
    • 可能只搜索用户具备读取和执行权限的目录
  • 格式:
#find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec]
[path...] [expression]

find [OPTION]... [查找路径] [查找条件] [处理动作]
  • 查找路径:指定具体目标路径;默认为当前目录

  • 查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件

  • 处理动作:对符合条件的文件做操作,默认输出至屏幕

  • 范例:

  • 默认列出当前目录下的所有文件

find
  • 查找大于100M的文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 查找大于120M,小于130M的文件
    在这里插入图片描述
[root@ubuntu2204 ~]# find
.
./dir1
./dir1/dir2
./dir1/dir2/dir3
./dir1/dir2/dir3/fx
./dir1/dir2/dir3/fy
./dir1/dir2/fa
./dir1/dir2/fb
./dir1/f1
./dir1/f2
./fstab
./.issue
8.1.2.1 指定搜索目录层级
-maxdepth N 	#最大搜索目录深度,指定目录下的文件为第1-mindepth N 	#最小搜索目录深度
  • 范例:
#最大搜索深度
[root@ubuntu2204 ~]# find /etc/ -maxdepth 2

#最小搜索深度
[root@ubuntu2204 ~]# find /etc/ -mindepth 2

#仅搜索第二层目录
[root@ubuntu2204 ~]# find /etc/ -maxdepth 2 -mindepth 2
8.1.2.2 先处理文件再处理目录
-depth #先处理文件
  • 范例:
[root@ubuntu2204 ~]# tree -a
.
├── dir1
│ ├── dir2
│ │ ├── dir3
│ │ │ ├── fx
│ │ │ └── fy
│ │ ├── fa
│ │ └── fb
│ ├── f1
│ └── f2
├── fstab
└── .issue
3 directories, 8 files

#默认先显示目录
[root@ubuntu2204 ~]# find
.
./dir1
./dir1/dir2
./dir1/dir2/dir3
./dir1/dir2/dir3/fx
./dir1/dir2/dir3/fy
./dir1/dir2/fa
./dir1/dir2/fb
./dir1/f1
./dir1/f2
./fstab
./.issue

#先显示文件
[root@ubuntu2204 ~]# find -depth
./dir1/dir2/dir3/fx
./dir1/dir2/dir3/fy
./dir1/dir2/dir3
./dir1/dir2/fa
./dir1/dir2/fb
./dir1/dir2
./dir1/f1
./dir1/f2
./dir1
./fstab
./.issue
.
8.1.2.3 根据文件名和inode查找
-name name 			#支持使用glob,如:*, ?, [], [^],通配符要加双引号引起来
-iname name 		#不区分字母大小写
-inum number 		#按inode号查找
-samefile name 		#相同inode号的文件
-links n 			#链接数为n的文件
-regex "PATTERN" 	#以PATTERN匹配整个文件路径,而非文件名称
  • 范例:
[root@ubuntu2204 ~]# ls
dir1 fstab test-a.log test-A.log test-a.txt test-A.txt test-b.log test-
B.log test-b.txt test-B.txt

#指定文件名查找
[root@ubuntu2204 ~]# find -name test-a.log
./test-a.log

#指定文件名,忽略大小写
[root@ubuntu2204 ~]# find -iname test-a.log
./test-a.log
./test-A.log

#通配符
[root@ubuntu2204 ~]# find -name "*txt"
./test-a.txt
./test-b.txt
./test-A.txt
./test-B.txt

#通配符
[root@ubuntu2204 ~]# find -name "test-a*"
./test-a.log
./test-a.txt

#正则表达式
[root@ubuntu2204 ~]# find -regex ".*\.log$"
./test-a.log
./test-b.log
./test-A.log
./test-B.log

#正则表达式
[root@ubuntu2204 ~]# find -regex ".*test-[a-z].*"
./test-a.log
./test-a.txt
./test-b.log
./test-b.txt

#正则表达式,路径匹配
[root@ubuntu2204 ~]# find -regex ".*dir3.*"
./dir1/dir2/dir3
./dir1/dir2/dir3/fx
./dir1/dir2/dir3/fy

#正则表达式,路径匹配
[root@ubuntu2204 ~]# find -regex ".*dir3$"
./dir1/dir2/dir3
8.1.2.4 根据属主属组查找
-user USERNAME 		#查找属主为指定用户(UID)的文件
-group GRPNAME 		#查找属组为指定组(GID)的文件
-uid UserID 		#查找属主为指定的UID号的文件
-gid GroupID 		#查找属组为指定的GID号的文件
-nouser 			#查找没有属主的文件
-nogroup 			#查找没有属组的文件
  • 范例:
[root@ubuntu2204 ~]# ll dir1/
total 0
drwxr-xr-x 3 root root 38 Jul 23 10:21 dir2
-rw-r--r-- 1 123 456 0 Jul 23 10:14 f1
-rw-r--r-- 1 789 root 0 Jul 23 10:14 f2
-rw-r--r-- 1 jose root 0 Jul 23 10:48 fa.txt
-rw-r--r-- 1 jose root 0 Jul 23 10:48 fb.txt
-rw-r--r-- 1 root mage 0 Jul 23 10:48 fc.txt
-rw-r--r-- 1 root mage 0 Jul 23 10:48 fd.txt

#指定属主
[root@ubuntu2204 ~]# find -user jose
./dir1/fa.txt
./dir1/fb.txt

#指定属主可以用 UID
[root@ubuntu2204 ~]# find -user 1010
./fa.txt
./fb.txt

#指定属组
[root@ubuntu2204 ~]# find -group mage
./dir1/fc.txt
./dir1/fd.txt

#指定属组可以用GID
[root@ubuntu2204 ~]# find -group 1000
./fc.txt
./fd.txt

#指定属主属组
[root@ubuntu2204 ~]# find -user jose -group root
./dir1/fa.txt
./dir1/fb.txt

#指定属主ID
[root@ubuntu2204 ~]# find -uid 1010
./dir1/fa.txt
./dir1/fb.txt

#指定属组ID
[root@ubuntu2204 ~]# find -gid 456
./dir1/f1

#指定属主属组ID
[root@ubuntu2204 ~]# find -uid 1010 -gid 0
./dir1/fa.txt
./dir1/fb.txt

#属主用户不存在
[root@ubuntu2204 ~]# find -nouser
./dir1/f1
./dir1/f2

#属组不在在
[root@ubuntu2204 ~]# find -nogroup
./dir1/f1

#属主属组不存在
[root@ubuntu2204 ~]# find -nouser -nogroup
./dir1/f1
8.1.2.5 根据文件类型查找
-type TYPE 	#指定文件类型

#type 值
f 	#普通文件
d 	#目录文件
l 	#符号链接文件
s 	#套接字文件
b 	#块设备文件
c 	#字符设备文件
p 	#管道文件
  • 范例:
#查看当前目录下的所有目录文件
[root@ubuntu2204 ~]# find -type d
.
./dir1
./dir1/dir2
./dir1/dir2/dir3

#查找run 目录下所有管道文件
[root@ubuntu2204 ~]# find /run/ -type p
8.1.2.6 空文件或目录
-empty #空文件或空目录
  • 范例:
#空文件或空目录
[root@ubuntu2204 ~]# find dir1/dir2/dir3/ -empty
dir1/dir2/dir3/fx
dir1/dir2/dir3/fy
dir1/dir2/dir3/dir4

#查找空目录
[root@ubuntu2204 ~]# find dir1/dir2/dir3/ -empty -type d
dir1/dir2/dir3/dir4

#查找空文件
[root@ubuntu2204 ~]# find dir1/dir2/dir3/ -empty -type f
dir1/dir2/dir3/fx
dir1/dir2/dir3/fy
8.1.2.7 组合条件
-a 			#与,多条件默认就是与关系,可省略
-o 			#或
-not|! 	#非
  • 范例:
#默认 -a, 可省略
[root@ubuntu2204 ~]# find -name "*log" -a -type f
./test-a.log
./test-b.log
./test-A.log
./test-B.log

#或
[root@ubuntu2204 ~]# find -name "test*log" -o -name "test*txt"
./test-a.log
./test-a.txt
./test-b.log
./test-b.txt

#非
[root@ubuntu2204 ~]# find dir1/dir2/dir3/ -empty -not -type d
dir1/dir2/dir3/fx
dir1/dir2/dir3/fy

#非
[root@ubuntu2204 ~]# find dir1/dir2/dir3/ -empty ! -type d
dir1/dir2/dir3/fx
dir1/dir2/dir3/fy
  • 范例:配合处理动作
[root@ubuntu2204 ~]# find -user jose -o -name "*log"
./dir1/fa.txt
./dir1/fb.txt
./test-a.log
./test-b.log
./test-A.log
./test-B.log

#此处 ls 只列出了后一个条件的匹配
[root@ubuntu2204 ~]# find -user jose -o -name "*log" -ls
138733453 0 -rw-r--r-- 1 root root 0 Jul 23 10:30 ./testa.log
138733455 0 -rw-r--r-- 1 root root 0 Jul 23 10:30 ./testb.log
138733459 0 -rw-r--r-- 1 root root 0 Jul 23 10:30 ./test-A.log
138733461 0 -rw-r--r-- 1 root root 0 Jul 23 10:30 ./test-B.log

#把条件括起来才表示全部
[root@ubuntu2204 ~]# find \( -user jose -o -name "*log" \) -ls
202397817 0 -rw-r--r-- 1 jose root 0 Jul 23 10:48 ./dir1/fa.txt
202397821 0 -rw-r--r-- 1 jose root 0 Jul 23 10:48 ./dir1/fb.txt
138733453 0 -rw-r--r-- 1 root root 0 Jul 23 10:30 ./testa.log
138733455 0 -rw-r--r-- 1 root root 0 Jul 23 10:30 ./testb.log
138733459 0 -rw-r--r-- 1 root root 0 Jul 23 10:30 ./test-A.log
138733461 0 -rw-

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

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

相关文章

Vue项目之Element-UI(Breadcrumb)动态面包屑效果 el-breadcrumb

效果预览 需要导航的页面Vue.js 最笨的方法就是在每个需要面包屑的页面中固定写好 <template><div class="example-container"><el-breadcrumb separator="/"

不再错过任何一个区块!用Node.js + WebSocket轻松实现区块链实时监控

文章目录 前言一、WebSocket是什么&#xff1f;二、项目结构三、代码实现1. 后端实现2. 前端实现 四、启动项目总结 前言 随着区块链技术的发展&#xff0c;实时监控区块链网络中的区块和交易信息变得越来越重要。无论是开发去中心化应用&#xff08;DApp&#xff09;&#xf…

【WebGIS实例】(17)下载瓦片底图并实现离线加载——以天地图为例

前言 在有些项目中&#xff0c;会有部署到无法访问互联网的内网环境中&#xff0c;这时候就会有离线部署应用和地图服务等需求了。 本博客是本着交流学习的目的&#xff0c;分享一个离线瓦片地图的获取方案&#xff0c;以天地图为案例&#xff0c;实现步骤&#xff1a; 安装…

读书笔记——DDIA-v2 设计数据密集型应用(第二版)

ddia-v2中文版地址&#xff1a;https://github.com/Vonng/ddia/tree/v2 ddia-v2看完感觉爱不释手&#xff0c;只要是数据相关的知识都娓娓道来&#xff0c;为什么会这样&#xff1f;现在是怎样的&#xff1f;这样有什么问题&#xff1f;其中的看法和想法实在精辟、干练&#xf…

典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式

先看代码与实现&#xff1a; 文件结构 triangle_area4.jsp <% page contentType"text/html;charsetUTF-8" pageEncoding"UTF-8" %> <html> <body> <%--<jsp:useBean>&#xff1a;用于在JSP中实例化JavaBean。在这里&#xff0c…

感知笔记1:ROS 视觉- 跟随红球

- 目录 - 如何在 ROS 中可视化 RGB 相机。如何作为机器人切换主题。如何创建 blob 检测器。如何获取要跟踪的颜色的颜色编码。如何使用 blob 检测数据并移动 RGB 相机以跟踪 blob。 机器人技术中最常见的传感器是不起眼的 RGB 摄像头。它用于从基本颜色跟踪&#xff08;blob 跟…

解决 TortoiseGitPlink Fatal Error:深入解析

解决 TortoiseGitPlink Fatal Error&#xff1a;深入解析 在 Windows 平台上&#xff0c;开发者使用 Git 和 TortoiseGit 进行版本控制时&#xff0c;有时会遇到 TortoiseGitPlink Fatal Error。该错误通常是在推送/拉取代码时&#xff0c;客户端未能提供正确的 SSH 密钥。 1…

Linux之实战命令06:locate应用实例(四十)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

Maven-四、继承

Maven进阶 文章目录 Maven进阶前言继承设置继承依赖管理总结 前言 一个项目中的不同模块可能引用的是同一个依赖&#xff0c;在这种情况下&#xff0c;单独在某个模块内引用太麻烦&#xff0c;于是maven使用继承的思想&#xff0c;在父模块中配置依赖包&#xff0c;其他需要这…

实战OpenCV之直方图

基础入门 直方图是对数据分布情况的图形表示&#xff0c;特别适用于图像处理领域。在图像处理中&#xff0c;直方图通常用于表示图像中像素值的分布情况。直方图由一系列矩形条&#xff08;也被称为bin&#xff09;组成&#xff0c;每个矩形条的高度表示某个像素值&#xff08;…

3.6 第四行之__ipipe_init_proc()

点击查看系列文章 》 Interrupt Pipeline系列文章大纲-CSDN博客 原创不易&#xff0c;需要大家多多鼓励&#xff01;您的关注、点赞、收藏就是我的创作动力&#xff01; 3.6 第四行之__ipipe_init_proc() __ipipe_init_proc()并不是直接在start_kernel中调用&#xff0c;它的…

JavaScript高级——事件循环模型

1、 2、所有代码分类 ① 初始化执行代码&#xff08;同步代码&#xff09;&#xff1a;包含绑定 dom 事件监听&#xff0c;设置定时器&#xff0c;发送 ajax 请求的代码 ② 回调执行代码&#xff08;异步代码&#xff09;&#xff1a;处理回调逻辑 3、js 引擎执行代码的基本流…

【Linux篇】网络编程基础(笔记)

目录 一、服务器模型 1. C/S 模型 2. P2P模型 二、服务器编程框架 1. I/O处理单元 2. 逻辑单元 3. 网络存储单元 4. 请求队列 三、网络编程基础API 1. socket 地址处理 API &#xff08;1&#xff09;主机字节序和网络字节序 &#xff08;2&#xff09;通用socket地…

论文阅读:A Generalization of Transformer Networks to Graphs

论文阅读&#xff1a;A Generalization of Transformer Networks to Graphs 论文地址1 摘要2 贡献Graph TransformerOn Graph Sparsity&#xff08;图稀疏&#xff09;On Positional Encodings&#xff08;位置编码&#xff09;3 Graph Transformer Architecture&#xff08;架…

GPT实现联网,NextChat插件的配置说明

简介 NextChat开源版本已支持插件调用。 不过&#xff0c;插件的配置略复杂&#xff0c;为了降低普通用户的配置难度&#xff0c;本文基于中转API做详细配置说明&#xff0c;后续如果有新增插件&#xff0c;本文也将同步更新配置说明。 在配置具体插件之前&#xff0c;你需要…

Spring后端直接用枚举类接收参数,自定义通用枚举类反序列化器

在使用枚举类做参数时&#xff0c;一般会让前端传数字&#xff0c;后端将数字转为枚举类&#xff0c;当枚举类很多时&#xff0c;很可能不知道这个code该对应哪个枚举类。能不能后端直接使用枚举类接收参数呢&#xff0c;可以&#xff0c;但是受限。 Spring反序列默认使用的是J…

The NCCoE’s Automation of the CMVP

Earlier today at the ICMC24, we heard from a panel about the US National Cybersecurity Center of Excellence’s (NCCoE) work on the Automated Cryptographic Module Validation Program (ACMVP), which intends to tackle the troublingly long queue times we’ve se…

Apifox 「定时任务」操作指南,解锁自动化测试的新利器

定时任务是按照预设时间自动执行的任务&#xff0c;它可以有效解决一些常见问题&#xff0c;比如频繁执行的回归测试和大规模的接口测试&#xff0c;这些任务需要在固定时间点或间隔周期内自动运行&#xff0c;以确保软件的持续集成和持续交付过程中的稳定性和可靠性。通过使用…

实操学习——个人资料的录入、修改、密码的修改

实操学习——个人资料的录入、修改、密码的修改 一、个人资料的录入和修改知识补充&#xff1a;装饰器二、密码的修改知识补充&#xff1a;docker的关闭与启动 一、个人资料的录入和修改 在users的app下创建一个用户详情表 from django.contrib.auth.models import User from…

C/C++逆向:switch语句逆向分析

在逆向分析中&#xff0c;switch语句会被编译器转化为不同的底层实现方式&#xff0c;这取决于编译器优化和具体的场景。常见的实现方式包括以下几种&#xff1a; ①顺序判断&#xff08;if-else链&#xff09;&#xff1a; 编译器将switch语句转化为一系列的if-else语句。这…