Linux 文件查找(find)与打包(tar)

王 茂南 2021年12月25日07:42:36
评论
1 3203字阅读10分40秒
摘要本文我们会介绍根据文件在 Linux 下文件的查找,同时简单介绍文件的打包操作。在文件查找部分,我们将展示如何使用下面的条件去查找一些文件:文件名包含某些文本,文件在一段时间内被使用,根据文件的大小进行搜索,文件属于某种类型,文件属于某个用户,文件具有一定的访问权限,对查找出来的文件执行操作(exec),which 命令。

简介

在 Linux 文件与目录 中,我们介绍了文件的相关属性。在这一篇文章中,我们会介绍根据文件的属性值或是其他参数条件进行文件的查找,同时简单介绍文件的打包操作。

文件查找部分,我们将展示如何使用下面的条件去查找一些文件:

  • 文件名包含某些文本(或是匹配某个模式,这个是最常用的);
  • 文件在一段时间内被使用(time);
  • 根据文件的大小进行搜索(size);
  • 文件属于某种类型(普通文件,目录);
  • 文件属于某个用户(owner);
  • 文件具有一定的访问权限(file mode bits);
  • 对查找出来的文件执行操作(exec);
  • which 命令;

 

文件的查找

find 命令用于在目录下查找文件,并且会打印所找到文件的信息。find 命令的使用方法如下:

  1. find [path...] [expression]

这里的 [expression] 会在后面的例子中详细介绍。

 

根据文件名进行搜索

对于常用的 find 命令来说,可以通过一个包含特殊字符串的 shell 模式(Shell Pattern) 去比较文件名或者部分文件名。 这里的特殊字符串又被称为 通配符(wildcards) ,通配符是一些特殊字符,又被称为 元字符(metacharacters),在后面的内容中我们统一称为 通配符。下面是几个常见的 shell pattern 中用到的通配符(为了跟一般命令参数做区分,在使用通配符的时候,通常需要使用 引号):

  • *: 匹配 0 个或多个字符;
  • ?: 匹配任意 1 个字符;
  • [string](中括号):匹配 string 字符串中的任意一个字符,如 [abc] 匹配 abc 三个字符中的任意一个,[a-z0-9] 匹配小写字母和数字。
  • \(反斜杠):移除特殊字符的特殊含义,转义

find 命令有两个基础名称模式

  • -name :指定名称;
  • -iname :指定名称忽略大小写;

例如下面的命令表示查找「当前目录」下,以字母 e 开头,.py 结尾的文件(这里使用了 -name,是区分大小写的):

  1. find ./ -name "e*.py"

运行上面的命令,最终结果如下图所示:

Linux 文件查找(find)与打包(tar)

 

查找一段时间内被使用的文件

每个文件都有三个时间戳(部分系统还会有文件的创建时间,例如 windows),分别为:

  • 访问(上一次访问文件的时间);
  • 更改(改变文件或其属性的时间);
  • 修改(修改文件内容的时间);

下面我们将介绍 find 命令中使用到这些时间戳的参数:

  • -atime n 测试项
    • 文件上一次访问时间是在 n*24 小时之前。
    • 需要注意的是,如果我们使用的 n 值为 0,则向下取整,意味着距离上一次访问文件时间不足 24 小时。
    • 同样 n 是数值参数,可以是 -n 和 +n
  • -ctime n 测试项
    • 这里代表的是状态的改变,文件上一次属性修改的时间是在 n*24 小时之前;
  • -mtime n 测试项
    • 这里代表文件内容被修改,文件上一次修改时间是在 n*24 小时之前;

为了方便记忆,我们可以将英文单词关联起来,这里的 a 是accessc 为 change ,而 m 则为 modify

除了用 24 小时计数之外,我们还可以细化到 minute 多少分钟,与上面对应的参数应该为:

  • -amin n
  • -cmin n
  • -mmin n

如下示例,我们查找当前目录下,修改文件的时间在 5 分钟 到 24 小时之间(下面 mmin +5 表示 5 分钟之前,mtime 0 表示 24 小时以内):

  1. find ./ -mtime 0 -mmin +5

下面是运行的截图,我们在 5 分钟前创建的 1.txt 文件可以被找出来:

Linux 文件查找(find)与打包(tar)

 

根据文件大小查找文件

文件的大小也是文件的属性中很重要的一栏,这里在 find 中加上参数 -size n[bckwMG]。这里的 n 是数据参数,b 代表块 blockc 代表字节,k 代表 1024 字节,即 kb,w 代表字符数量(2-byte 的字符),M 代表兆字节,G 代表千兆字节。

例如,查找当前目录下的小于 100k 的文件。

  1. find -size -100k

 

根据文件类型进程查找

我们还可以在搜索过程中加上文件类型的限制,使用 -type 来加上文件类型。可以有以下的三种类型选择:

  • d 目录
  • f 普通文件
  • l 符号链接

例如,我们查找在当前目录下,文件大小大于 30k,且 24 小时内被修改过的,普通文件:

  1. find ./ -mtime 0 -size +30k -type f

 

根据文件所属用户查找

我们还可以在搜索中加上用户或是用户组的限制。分别使用 -user uname 来指定用户,使用 -group gname 来指定所属组的名称。

例如下面的例子查找当前目录下所属用户为 mathpretty 的文件:

  1. find -user mathpretty

 

根据文件权限查找

我们还可以根据文件的权限对文件进行查找,共有三种权限(下面的三种权限都是针对当前用户对该文件是否有对应的权限):

  • -readable, 可读;
  • -writable, 可写;
  • -executable, 可执行;

例如,下面的例子查找当前用户对当前目录下有可写权限,同时 txt 结尾的文件:

  1. find ./ -writable -name "*txt"

 

对查找的文件执行操作

我们一般查找出来文件并不仅仅是看看而已,还会有进一步的操作,这个时候就要用到 -exec 选项。-exec 选项后面紧跟要执行的命令或脚本,然后是 {}、空格和 \;

考虑到各个系统中 ; 有不同的意义,所以前面要加反斜杠。有时使用这一选项是为了查找文件并删除它们。建议在真正执行删除之前,先确认一下。

例如,我们想要显示查找文件的详细信息

  1. find ./ -type f -mtime 0 -exec ls -l {} \;
Linux 文件查找(find)与打包(tar)

或是删除对应的文件,并在删除前进行确认(这里把-exec 替换为-ok,按 y 键删除文件,按 n 键不删除):

Linux 文件查找(find)与打包(tar)

 

which 命令

which 命令一般用于查找 shell 命令的完整路径。该命令在环境变量PATH中列出的目录中搜索可执行文件或脚本进行匹配查找。常用的如 -a 参数,代表列出所有匹配的查找结果,而不仅仅是第一个。

示例如下,查找 python 可执行文件的路径:

Linux 文件查找(find)与打包(tar)

 

文件的打包

linux 中,支持的压缩命令是非常多的,并且不同的压缩命令所使用的压缩机制也不尽相同,再加上很多比较老的压缩方式如 zip 等已经不常用了。不同于文件查找的描述,对于这一部分的内容,我们仅简单介绍两个常用的操作。

gzip 对文件压缩

gzip 命令用于对文件进行压缩,生成的压缩文件会以 .gz 结尾。而对应的解压缩的命令则是 gunzip。两个命令的使用格式情况如下:

  1. gzip -v file
  2. gunzip -v file

例如下面的例子中,我们对文件 1 进行压缩,文件会变为 1.gz

Linux 文件查找(find)与打包(tar)

 

tar 对一系列文件打包

tar 是用于创建文件档案的命令行工具,多用于备份文件。顾名思义,tar 命令可以将一系列的文件打包到一个大文件中,也可以将大文件解包以恢复数据。下面,我们将介绍 tar 的常用参数。tar 命令的格式大致如下:

  1. tar [OPTION...] [FILE]

其中 option 可以有以下的选项:

  • -c 或 --create :创建一个存档;
  • -r :将文件附加到档案文件末尾;
  • -z 或 --gzip :指定 gzip 格式;
  • -v 或 --verbose :显示文件处理的详细过程;
  • -f :指定档案文件名称;
  • -x :还原档案文件;

例如现在文件夹下,有两个文件 45,还有一个文件夹 testtest 文件夹下有文件 123,如下所示:

  1. ./
  2. ├── 4
  3. ├── 5
  4. └── test
  5.     ├── 1
  6.     ├── 2
  7.     └── 3
  8. 1 directory, 5 files

我们使用 tar 命令将这 5 个文件归档到 test.tar 中。

  1. tar -cvf test.tar *

可以看到多了一个 test.tar 文件:

Linux 文件查找(find)与打包(tar)

如果需要解压,则使用 x 这个参数,如下所示:

  1. tar -xvf test.tar

 

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2021年12月25日07:42:36
  • 转载请务必保留本文链接:https://mathpretty.com/14342.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: