前提:公司日志文件每天产生几十G又不能删,而且要保存半年;那就只能压缩,但文件是每天一加的,那就只能在压缩文件中添加/更新文件?
目录
1.tar包解决的问题
Linux系统下tar命令参数详解:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令;
-t :查看 tarfile 里面的文件;
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩;
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩;
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程;
-f :使用档名,请留意,在 f 之后要立即接档名,不要再加参数;
-p :使用原文件的原来属性(属性不会依据使用者而变);
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中;
--exclude FILE:在压缩的过程中,不要将 FILE 打包。
Linux系统下操作tar压缩包,需要用tar命令,追加参数用“-r"选项,取出参数用“-x”选项,案例如下:
如果有一个包 a.tar.gz ,需要把b.txt追加进去,就用命令:
tar -rvf a.tar.gz b.txt
从tar包zhidao.tar.bz2中取出file2.txt则用:
tar -xvf a.tar.gz b.txt #tar -xvf a.tar.gz ,后面不跟文件名,就会解压整个zhidao.tar.bz2包。
注:该追加参数必须是 “ -cvf ” ,才能用-rvf参数才生效;
否则报错如下:
~]# tar -rcf a.tar.gz b.txt tar: You may not specify more than one `-Acdtrux' or `--test-label' option Try `tar --help' or `tar --usage' for more information. ~]# tar -rzcf a.tar.gz b.txt tar: You may not specify more than one `-Acdtrux' or `--test-label' option Try `tar --help' or `tar --usage' for more information. ~]# tar -zrcf a.tar.gz b.txt tar: You may not specify more than one `-Acdtrux' or `--test-label' option Try `tar --help' or `tar --usage' for more information. # 如果用这种方法相当与覆盖压缩了 ~]# tar -zcvf a.tar.gz b.txt b.txt
注:该方法不能达到要求,我发现他只是归档,而不压缩,如果使用如下类似的方法,则意义不大;
gunzip archive.tar.gz #解压 tar rf archive.tar data/data/com.myapp.backup/./files/settings.txt #归档 gzip archive.tar #再压缩
既然tar不行,那就用其他压缩命令
压缩命令大全:Linux tar命令|极客笔记https://deepinout.com/linux-cmd/linux-archiving-and-compression-related-cmd/
2.Linux zip命令 语法
zip [选项] [压缩文件] # 使用unzip命令可以解压缩zip文件。
命令中各选项的含义如下表所示。
- -A 调整可执行的自动解压缩文件。
- -b<工作目录> 指定暂时存放文件的目录。
- -c 替每个被压缩的文件加上注释。
- -d 从压缩文件内删除指定的文件。
- -D 压缩文件内不建立目录名称。
- -f 更新现有的文件。
- -F 尝试修复已损坏的压缩文件。
- -g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。
- -h 在线帮助。
- -i<范本样式> 只压缩符合条件的文件。
- -j 只保存文件名称及其内容,而不存放任何目录名称。
- -J 删除压缩文件前面不必要的数据。
- -k 使用MS-DOS兼容格式的文件名称。
- -l 压缩文件时,把LF字符置换成LF+CR字符。
- -ll 压缩文件时,把LF+CR字符置换成LF字符。
- -L 显示版权信息。
- -m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。
- -n<字尾字符串> 不压缩具有特定字尾字符串的文件。
- -o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。
- -q 不显示指令执行过程。
- -r 递归处理,将指定目录下的所有文件和子目录一并处理。
- -S 包含系统和隐藏文件。
- -t<日期时间> 把压缩文件的日期设成指定的日期。
- -T 检查备份文件内的每个文件是否正确无误。
- -u 与 -f 参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
- -v 显示指令执行过程或显示版本信息。
- -V 保存VMS操作系统的文件属性。
- -w 在文件名称里假如版本编号,本参数仅在VMS操作系统下有效。
- -x<范本样式> 压缩时排除符合条件的文件。
- -X 不保存额外的文件属性。
- -y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
- -z 替压缩文件加上注释。
- -$ 保存第一个被压缩文件所在磁盘的卷册名称。
- -<压缩效率> 压缩效率是一个介于1-9的数值。
zip命令 示例
将/root/a.txt文件压缩成/root/a.zip文件
~]# zip /root/a.zip /root/a.txt adding: /root/a (stored 0%)
将/root/a文件压缩成/root/a.zip文件,并指定加密密码
~]# zip -e /root/a.zip /root/a.txt Enter password: //在这里输入压缩加密密码 Verify password: //再一次输入压缩加密密码 adding: root/a (stored 0%)
测试压缩文件/root/a.zip的完整性
~]# zip -T /root/a.zip test of /root/a.zip OK
将/root/a.txt文件压缩成/root/a.zip文件,并且添加一行注释
~]# zip -c /root/a.zip /root/a.txt adding: root/a (stored 0%) Enter comment for root/a: zip file //在这里添加注释信息
更新/root/a.zip压缩文件,添加/root/b.txt文件
[root@rhel ~]# zip -u /root/a.zip /root/b adding: root/b (stored 0%)
压缩/root/a文件,生成的压缩文件设置成和/root/a文件一样的时间
[root@rhel ~]# zip -o /root/a.zip /root/a.txt adding: root/a (stored 0%)
将/home目录压缩成/root/home.zip文件
~]# zip -r /root/home.zip /home
压缩/boot目录,但是排除/boot/grub/grub.conf文件
查看压缩包但不解压~]# zip -r /root/boot.zip /boot -x /boot/grub/grub.conf adding: boot/ (stored 0%) adding: boot/config-2.6.32-358.el6.x86_64 (deflated 75%) adding: boot/vmlinuz-2.6.32-358.el6.x86_64 (deflated 1%) adding: boot/lost+found/ (stored 0%) adding: boot/.vmlinuz-2.6.32-358.el6.x86_64.hmac (deflated 22%) adding: boot/System.map-2.6.32-358.el6.x86_64 (deflated 79%) adding: boot/efi/ (stored 0%) adding: boot/efi/EFI/ (stored 0%) adding: boot/efi/EFI/redhat/ (stored 0%) adding: boot/efi/EFI/redhat/grub.efi (deflated 60%) adding: boot/initramfs-2.6.32-358.el6.x86_64.img (deflated 1%) adding: boot/symvers-2.6.32-358.el6.x86_64.gz (deflated 0%) adding: boot/grub/ (stored 0%) adding: boot/grub/splash.xpm.gz (deflated 88%) adding: boot/grub/fat_stage1_5 (deflated 38%) adding: boot/grub/ffs_stage1_5 (deflated 39%) adding: boot/grub/stage1 (deflated 17%) adding: boot/grub/iso9660_stage1_5 (deflated 38%) adding: boot/grub/e2fs_stage1_5 (deflated 40%) adding: boot/grub/jfs_stage1_5 (deflated 40%) adding: boot/grub/device.map (deflated 5%) adding: boot/grub/stage2 (deflated 45%) adding: boot/grub/ufs2_stage1_5 (deflated 39%) adding: boot/grub/vstafs_stage1_5 (deflated 39%) adding: boot/grub/reiserfs_stage1_5 (deflated 40%) adding: boot/grub/minix_stage1_5 (deflated 40%) adding: boot/grub/menu.lst (deflated 36%) adding: boot/grub/xfs_stage1_5 (deflated 39%)
~]# unzip -v a.zip Archive: a.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 151005959 Defl:N 14387536 91% 12-02-2021 17:10 000983ad a.txt 127489195 Defl:N 11942580 91% 12-02-2021 17:13 5bb5d63f b.txt -------- ------- --- ------- 278495154 26330116 91% 2 files
测试文件内的文件是否正常
~]# unzip -t a.zip Archive: a.zip testing: a.txt OK testing: b.txt OK No errors detected in compressed data of a.zip.
在压缩文件中删除指定文件
~]# zip a.zip -d b.txt deleting: b.txt ~]# unzip -v a.zip Archive: a.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 151005959 Defl:N 14387536 91% 12-02-2021 17:10 000983ad a.txt -------- ------- --- ------- 151005959 14387536 91% 1 file
指定解压路经
~]$ unzip -d /root a.zip Archive: a.zip inflating: /root/a.txt ~]# ls a.txt
3.指定添加删除释放
最后关键就是我们此次的需求
#指追添加 ~]# zip -g a.zip b.txt adding: b.txt (deflated 91%) ~]# unzip -v a.zip Archive: a.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 151005959 Defl:N 14387536 91% 12-02-2021 17:10 000983ad a.txt 127489195 Defl:N 11942580 91% 12-02-2021 17:13 5bb5d63f b.txt -------- ------- --- ------- 278495154 26330116 91% #指定删除 ~]# zip a.zip -d b.txt deleting: b.txt ~]# unzip -v a.zip Archive: a.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 151005959 Defl:N 14387536 91% 12-02-2021 17:10 000983ad a.txt -------- ------- --- ------- 151005959 14387536 91% 1 file #指定解压 ~]# unzip -d /root a.zip b.txt Archive: a.zip inflating: /root/b.txt ~]# ls /root b.txt