文件查找,压缩,归档

文件查找,压缩,归档

文件查找

locate:数据库查找

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

  • 查找速度快
  • 模糊查找
  • 非实时查找
  • 搜索的是文件全路径,不仅仅是文件名
  • 可能只搜索用户具备读取和执行权限的目录
1
2
3
4
5
6
7
8
-n			# 显示n条
-b			# 匹配文件,不匹配目录
-c			# 显示数量
-r			# 使用正则
-d			# 指定数据库
-q			# 显示静默

updatedb	# 更新数据库

find:实时查找

  • 查找速度略慢
  • 精确查找
  • 实时查找
  • 查找条件丰富
  • 可能只搜索用户具备读取和执行权限的目录
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
-maxdepth N		# 最大搜索目录深度,指定目录下的文件为第1级
-mindepth N  	# 最小搜索目录深度
-depth			# 先查文件

-name				# 文件名查找
-iname				# 文件名查找,忽略大小写
-inum num			# inode查找
-samefile name		# inode与name相同的文件(查找硬链接)
-links n			# 链接数为n的文件或目录
-regex "pattern"	# 使用正则

-user USERNAME          
-group GRPNAME          
-uid UserID             
-gid GroupID            
-nouser                 
-nogroup  

-type TYPE
#type 值
f       #普通文件
d       #目录文件
l       #符号链接文件
s       #套接字文件
b       #块设备文件
c   	#字符设备文件
p       #管道文件

-empty	#空文件或空目录

-a			# 与
-o			# 或
-!			# 非
-not		# 非

条件匹配例子,使用()做分隔

image-20241101112131396

image-20241101112306281

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
-path name -prune		# 排除name中的文件

[root@ubuntu2204 ~]# find -name "*.txt"
 ./dir1/fa.txt
 ./dir1/fb.txt
 ./test-a.txt
 ./test-b.txt
 ./dir4/f-x.txt
 ./dir4/f-y.txt
 
 #排除 dir1 目录中的 txt 文件,但还是会输出 dir1
 [root@ubuntu2204 ~]# find -path './dir1' -prune -o  -name "*.txt"
 ./dir1
 ./test-a.txt
 ./test-b.txt
 ./dir4/f-x.txt
 ./dir4/f-y.txt
 #action 作用在后一个条件上
[root@ubuntu2204 ~]# find -path './dir1' -prune -o  -name "*.txt" -print
 ./test-a.txt
 ./test-b.txt
 ./dir4/f-x.txt
 ./dir4/f-y.txt
 #排除多个目录
[root@ubuntu2204 ~]# find \( -path './dir1' -o -path './dir4' \) -prune -o  
name "*.txt" -print
 ./test-a.txt
 ./test-b.txt
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
-size

-size +2k -size -10k

# 时间戳
#以天为单位
-atime [+|-]N
-mtime [+|-]N
-ctime [+|-]N

#以分钟为单位
-amin [+|-]N
-mmin [+|-]N
-cmin [+|-]N
  1. -mtime:按文件内容的修改时间(Modification Time)查找。
  2. -atime:按文件的访问时间(Access Time)查找。
  3. -ctime:按文件的状态改变时间(Change Time)查找。
  • find . -mtime n:查找刚好n 天前修改过的文件。
  • find . -mtime +n:查找大于 n 天前(不包括第 n 天)修改的文件。
  • find . -mtime -n:查找小于 n 天前(包括今天到第 n 天)修改的文件。

根据权限查找

1
2
3
-perm 444		# 精确匹配
-perm /444		# 匹配到一位
-perm -444		# 至少有权限

动作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
-print			# 默认
-print0
-ls
-fls file		# 将结果保存到文件file中
-delete

-ok COMMAND {} \;		# 执行命令,执行前询问
-exec COMMAND {} \;		# 执行命令

{}				#引用查找到的文件名称

find -name "*log" -exec cp {} {}.bak \;
find -amin +15 -ok rm {} \;

image-20241101150451063

压缩,解压缩

zip,unzip:.zip

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
zip  zipfile FILE
unzip zipfile FILE

# zip
-1			# 快速压缩
-9			# 最高压缩比
-r			# 递归压缩目录,到一个包
-u			# 如果压缩包内有,则更新,如果没有,则追加进去
-f			# 更新文件
-d			# 从压缩包中删除
-m			# 压缩后删除原文件
-z			# 给压缩包加注释
-P passwd	# 设置密码
-i 			# 仅压缩指定文件
-X			# 不保留额外文件属性
-y			# 保存链接符号,非链接指向的文件

# unzip
-l 			# 查看压缩包里内容
-n			# 解压缩,不覆盖
-o			# 覆盖
-x			# 指定不需要解压缩的文件
-d			# 指定解压到的目录
-t			# 测试完整
-X			# 解压时,恢复UID,GID
-K			# 解压时,恢复权限

zcat:不解压查看文件

1
2
-d		# 解压
-l		# 压缩包内列表

zcat 命令是专门用来查看 .gz 格式的压缩文件内容

不常用

compress , uncompress:.Z

1
2
3
4
5
-r		# 递归压缩文件,压缩文件,不是整个目录
-d		# 解压
-c > file	# 将压缩文件另存为
compress fstab
uncompress fstab.Z

gzip,gunzip:.gz

1
2
3
-k		# 保留源文件
-r		# 递归同上
-l		# 压缩文件信息

bzip2,bunzip2:.bz2

1
2
3
-d
-k
-N		# 指定压缩等级

xz,unxz:.xz

1
2
3
-d
-k
-T		#多开线程

image-20241101143552211

打包,解包

对多目录与文件进行归档。

tar

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
-A				# 将归档文件(.tar 文件)合并到现有的归档中
-c				# 创建新的归档
-d				# 找出归档与文件系统差异
--delete		# 从归档中删除
-r				# 追加文件至归档结尾
-t				# 列出归档内容
-u				# 仅追加比归档内容新的文件
-x				# 从归档中解出文件

-v				# 显示过程
-f				# 指定压缩包文件

-p 				# 保留文件权限信息

-z   			#相当于gzip压缩工具                               
-j     			#相当于bzip2压缩工具                             
-J     			#相当于xz压缩工具   

-h						# 软链接指向文件也打包
--hard-dereference		# 硬链接指向文件也打包
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#只打包,不压缩
tar -cf etc.tar /etc

tar -cf etc.tar /etc

# 追加
tar -rf test.tar f3.txt passwd

# 删除
 tar --delete -f test.tar f1.txt f2.txt
 
# 将 additional.tar 的内容追加到 original.tar
tar -A -f original.tar additional.tar

# 指定目录解包
tar -xf log.tar -C /tmp

# 从文件中读取要打包的文件
[root@ubuntu2204 0510]# cat list.txt 
f1.txt
f2.txt
[root@ubuntu2204 0510]# tar -zcvf x.tar.gz -T list.txt 
f1.txt
f2.txt

# 排除文件,不归档
tar zcvf /root/a.tgz --exclude=/app/host1 --exclude=/app/host2 /app

tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist

split

1
2
3
4
-b size			# 指定分割大小
-C	size		# 同上,但尽量维持完整性
-d				# 分割完后,后缀使用数字
-l				# 指定行数,多少行切一个文件

image-20241101151635869