Linux15--文件管理之:文件查找find、打包压缩、输出管道

1 文件查找

# find命令: 在linux系统中,按照我们的要求去查找文件


# 1.格式:
    find [查询的路径] [匹配模式] [匹配规则] [匹配后的处理动作]

# 2.匹配模式:
    -name:按文件名去匹配
    -iname  忽略大小写

    -type:按文件类型匹配
      常见文件类型:
        f:普通文件
        d:普通文件夹
        b:块设备文件
        c: 字符设备文件
        s:socket文件
        l:链接文件
        
    -perm :按文件权限匹配
    
    -maxdepth :指定查找的目录深度
     
           
    -user  :按文件属主匹配
    -nouser:查询没有属主的文件  # 即属主用户被删除了的文件
    
    -group  :按文件属组匹配
    -nogroup:查询没有属组的文件
     
    -size:按文件大小匹配
        +  查询超过n的文件
        -  查询小于n的文件
        
        # 貌似:还不能小数点  eg: +1.5K  报错
        
        # 注: 大小单位  如果单位为b或不写单位,默认按照 512Byte(硬盘的一个扇区块)来搜索
                        eg: 2 或 2b,会查找出两个块扇区,意味着 512-1024之间的都会被查找
        
        字节(b)     : c
        双字节(中文) : w
        KB         : k
        MB         : 大写的M
        GB         : 大写的G
        
         
    -mtime:按文件的修改时间匹配    modify
    -ctime:按文件的创建时间匹配    create
    -atime:按文件的访问时间匹配    access
        + n 查询n天前的文件
        - n 查询n天内的文件
    
    
    -a:并且  # and 默认
    -o:或者  # or

     
# 3.匹配规则 (结合正则匹配)
    * : 匹配任意数量的任意字符(匹配零个或多个任意字符)
    ? : 匹配任意一个字符
    

# 4.处理动作
    -exec:  非交互式的 处理 匹配到的内容   # <===> " | xargs -I "
    -ok  :  交互式的 处理 匹配到的内容
    
    
    -print
    -ls
    -delete   #  <===>  -exec rm -rf {} \;

    

# 补充:
# 常见的文件权限:
    755:文件夹的默认权限
    644:文件的默认权限

# 删除用户及用户组
    删除用户  :userdel   # -r 彻底删除
    删除用户组 :groupdel
    
# 查看文件的各种时间
     stat

查找案例

# 1.查询出/etc目录下的hosts文件  
    find /etc -name "hosts"

# 2.查询出/etc目录下的以ifcfg开头的文件
    find /etc/ -name "ifcfg*"
            
# 3.查询出/etc目录下以.conf结尾的文件
    find /etc/ -name "*.conf"

# 4.查询出/etc目录下,文件名中包含host的文件有哪些
    find /etc/ -name "*host*"

# 5.查询出/etc目录下,所有的普通文件
    find /etc/ -type f

# 6.查询出/etc目录下,所有的文件夹
    find /etc/ -type d
            
# 7.查询出/dev/目录中的所有的块设备文件
    find /dev/ -type b
    
# 8.查询出/dev目录中所有的字符设备文件
    find /dev/ -type c
    
# 9.查询出/etc目录中文件名包含nginx的普通文件
    find /etc/ -name "*nginx*" -type f
            
# 10.查询出/root目录下,权限为755的文件
    find /root/ -perm 755
            
# 11.查询出属主为test01的文件
    find /root/ -user test01
            
# 12.查询属主被删除了的文件
    find /root/ -nouser 

# 13.查询属组为test的文件
    find /root/ -group test
            
# 14.查询属组被删除了的文件
    find /root/ -nogroup
            
# 15.查询2天以前修改过的文件
    find /root/ -mtime +2
            
# 16.查询2天以内创建的文件
    find /root/ -ctime -2

# 17.查询2天以内访问过的文件
    find /root/ -atime -2
            
# 18.查询大于1M的文件
    find /root/ -size +1M
            
# 19.查询小于1M的文件
    find /root/ -size -1M
            
            
# 20.查询在3天以内创建的文件,并删除   ***
    find /tmp/ -ctime -3 -type f -exec rm -rf {} \;
        -exec :处理查询之后的内容
        {}    :代表的是查询到的内容、
        \;    : 固定搭配
        
    find /tmp/ -ctime -3 -type f | xargs -I {} rm -rf {} 
        
        
# 21.将所有3天前创建的普通文件加上.bak后缀
    find /tmp -ctime -3 -type f -exec mv {} {}.bak \;
    
    find /tmp -ctime -3 -type f | xargs -I {} mv {} {}.bak
        
        
# 补充:
    xargs :将所有内容格式化成一行
    xargs -I {} :将所有内容格式化成一行,且放进{}中,其他命令就可以从{}中取出内容,进行命令执行
    
    因为前一个命令执行的结果可能包含换行,
    且将执行结果作为第二个命令参数传递时,命令就不能执行(有些命令执行时,参数不能有换行)
    所以可以通过xargs将参数过滤,将换行换成空格

2 打包压缩

# 1 什么是打包压缩 
  打包指的是将多个文件和目录合并为一个特殊文件 然后将该特殊文件进行压缩 最终得到一个压缩包

# 2 为什么使用压缩包  
  1.减少占用的体积 2.加快网络的传输

# 3 Windows的压缩和Linux的有什么不同  
  windows: zip、rar(linux不支持)

  linux  : zip、tar、bzip2、gzip 


# PS: 
  1.两个系统互通使用,选择 zip
  
  2.压缩包的后缀不重要,但一定要携带 '.'
  
  3.打包压缩通常用于备份文件,文件的名字必须见名知意 且应该带上时间、主机名之类
    
    eg: 
      1.获取当前时间
      date "+%Y_%m_%d_%H_%M_%S"
      
      2.打包压缩
      tar -zcvf 2023_06_28_etc_bak.tar.gz  /etc/ 
       
      3.两者合并
      tar -zcvf ` date "+%Y_%m_%d_%H_%M_%S"`_etc_bak.tar.gz  /etc/ 

压缩软件

1.gzip

# gzip
    压缩软件,将文件做成一个压缩包,会删除原来的文件,生成一个新的压缩包文件
    
# 格式:
    压缩:gzip [文件路径]
    
    解压:gzip -d [压缩包路径]
    
# 缺点:
    gzip不能压缩目录

2.bzip2

# bzip2
    压缩软件,将文件做成一个压缩包,会删除原来的文件,生成一个新的压缩包文件
    
# 格式:
    压缩:bzip2 [文件路径]
    解压:bzip2 -d [压缩包路径]
    
# 缺点:
    bzip2不能压缩目录
    
# 比较
    gzip 比 bzip2压缩率更大

3.tar 常用

# tar
    打包文件或目录,不会删除原文件,也不会压缩文件;
    但可以跟 gzip 或 bzip2 共同使用,进行打包和压缩
    
# 格式:
    tar [必要参数] [选择参数] [压缩包名称] [原文件或目录]
 
    # 必要参数:
        -f: 指定压缩包的名称   # filename
        -c: 打包文件  # 小写   create

        -z: 指定使用gzip压缩,一般使用gzip压缩的文件都以.tar.gz作为扩展名
        -j: 指定使用bzip2压缩,一般使用bzip2压缩的文件都以.tar.bz2作为扩展名
        
        -x: 解压,不需要指定压缩包的压缩类型,会自动匹配压缩包的类型自行解压
        
        -v: 显示压缩包压缩或解压的过程   # view
        
        -P: 文件名保留绝对路径,不移除文件名称前的"/"# 大写
        # 若解压使用-P,表示解压到文件的原始路径中,若有系统文件,容易覆盖;不使用,表示解压到当前或指定目录
        
        -t: 查看压缩包中的内容
        
    # 注:参数共同使用时,f放在最后,紧跟压缩包名称
    
    # 选择参数:
        -C: 解压到指定目录  #  大写
    
         
# eg:
# 打包并压缩一个文件(使用gzip压缩)                      记住常用  zcvf 或 jcvf、  xvf
    tar -zcvf rumenz.tar.gz rumenz.txt
    
# tar.gz解压缩到/tmp目录
    tar -xvf rumenz.tar.gz -C /tmp
      
# 列出压缩包里面的内容
    tar -tf rumenz.tar.bz2 
      
# 将/etc目录中的所有普通文件压缩成/tmp/etc.tar.gz文件
    tar -czvPf /tmp/etc.tar.gz $(find /etc/ -type f | xargs)
    
    
# 补充:  ***
  $():相当于数学中的括号,优先看括号中的内容,再执行tar

4.zip 常用

压缩文件或文件夹

# 安装压缩与解压命令
    yum -y install zip unzip
    
    
# 压缩
zip [选项] 压缩包名 源文件或源目录列表
    -r  递归压缩
    -m    将文件压缩之后,删除原始文件  # 相当于把文件移到压缩文件中
    
    -v    显示详细的压缩过程信息
    -q  静默输出,不显示过程

    eg: zip -r etc.zip /etc
    
    
# 解压
unzip [参数]  压缩包名
    -d 目录名    将压缩文件解压到指定目录下
    
    -n 解压时,不覆盖已经存在的文件
    -o 解压时,覆盖已经存在的文件,并且无需用户确认
    
    -l 显示压缩包的列表信息
    -v 查看压缩文件的详细信息,包括压缩包中的文件大小、文件名以及压缩比等,但是不解压
    -t 检查压缩文件是否正确、完整,但并不解压

 
# eg: 
    zip -r tmp.zip /tmp 
    unzip tmp.zip

3 管道

用于传输数据,将管道前的命令执行结果,交给管道之后的命令进行处理

# 格式:
    |

# xargs:把一些不支持从管道获取的命令,变得支持管道  ***
  | xargs :将所有内容格式化成一行
  | xargs -I {} :将所有内容格式化成一行,且放进{}中,其他命令就可以从{}中取出内容,进行命令执行
    
    因为前一个命令执行的结果可能包含换行,
    且将执行结果作为第二个命令参数传递时,命令就不能执行(有些命令执行时,参数不能有换行)
    所以可以通过xargs将参数过滤,将换行换成空格


# 案例
# 1.删除/tmp目录下,一天以内创建的文件
    find /tmp/ -ctime -1 -type f | xargs -I {} rm -rf {}
      
# 2.将etc中所有的普通文件,复制到/tmp目录中
    find /etc/ -type f | xargs -I {} cp -r {} /tmp/
posted @   Edmond辉仔  阅读(338)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示