使用tar命令可打包并压缩文件,结合gzip(-z)、bzip2(-j)、xz(-J)实现高效归档,支持打包时排除文件、解压时提取指定文件,并可通过pv监控进度、ssh管道远程传输,注意权限保留与磁盘空间管理。

在Linux中,要压缩文件,我们最常用的工具就是
tar
tar
gzip
bzip2
xz
tar
使用
tar
最常见也是最推荐的做法,是先用
tar
.tar
tar
创建压缩归档文件:
使用gzip
.tar.gz
.tgz
tar -czvf archive_name.tar.gz /path/to/your/files_or_directory
-c
-z
gzip
-v
-f
示例:
# 压缩当前目录下的my_project文件夹 tar -czvf my_project_backup.tar.gz my_project/ # 压缩多个文件 tar -czvf important_docs.tar.gz doc1.txt report.pdf
使用bzip2
.tar.bz2
.tbz2
gzip
bzip2
tar -cjvf archive_name.tar.bz2 /path/to/your/files_or_directory
-j
bzip2
示例:
tar -cjvf large_data.tar.bz2 /var/log/
使用xz
.tar.xz
.txz
xz
tar -cJvf archive_name.tar.xz /path/to/your/files_or_directory
-j
xz
示例:
tar -cJvf ultimate_archive.tar.xz /home/user/my_huge_archive/
解压归档文件:
解压时,只需将创建时的
-c
-x
-z
-j
-j
解压.tar.gz
tar -xzvf archive_name.tar.gz
-x
解压.tar.bz2
tar -xjvf archive_name.tar.bz2
解压.tar.xz
tar -xJvf archive_name.tar.xz
默认情况下,文件会解压到当前目录。如果你想解压到特定目录,可以使用
-c
tar -xzvf archive_name.tar.gz -C /path/to/destination_directory
tar
gzip
bzip2
这个问题其实挺有意思的,它触及到了Linux文件处理哲学的一些核心。简单来说,
tar
tar
而
gzip
bzip2
xz
所以,当我们要处理一个目录,或者一堆文件时,如果直接用
gzip
.gz
.gz
区别总结:
tar
gzip
bzip2
xz
tar
将
tar
tar -czvf ...
tar
gzip
tar
gzip
.tar.gz
tar
在实际操作中,我们经常会遇到这样的需求:一个巨大的
tar
tar
创建时只包含特定文件或目录:
在创建归档时,你只需在命令的末尾列出你想要包含的文件或目录即可。
# 示例1:只压缩当前目录下的file1.txt和my_sub_dir文件夹 tar -czvf partial_archive.tar.gz file1.txt my_sub_dir/ # 示例2:压缩某个目录下的特定文件,例如只压缩/var/log/nginx/下的access.log和error.log tar -czvf nginx_logs.tar.gz /var/log/nginx/access.log /var/log/nginx/error.log
如果你想排除某些文件或目录,可以使用
--exclude
# 示例:压缩my_project目录,但排除其中的.git文件夹和build目录 tar -czvf my_project_no_git_build.tar.gz --exclude='./my_project/.git' --exclude='./my_project/build' my_project/ # 注意:--exclude 后面跟着的路径是相对于 tar 命令要处理的目录而言的。 # 如果你是在my_project的父目录执行,并且要压缩my_project,那么路径就是 './my_project/.git'
解压时只提取特定文件或目录:
解压时,你可以在归档文件名的后面指定你想要提取的文件或目录的路径。这些路径必须与归档内部的路径结构相匹配。
# 示例1:从archive.tar.gz中只解压file1.txt tar -xzvf archive.tar.gz file1.txt # 示例2:从archive.tar.gz中只解压my_project/src/目录 tar -xzvf archive.tar.gz my_project/src/ # 示例3:如果知道归档里有一个名为'data/report.csv'的文件,只解压它 tar -xzvf backup.tar.gz data/report.csv
如果你不确定归档内部的文件结构,可以先使用
-t
tar -tzvf archive.tar.gz
这会列出归档中所有文件的路径,帮助你准确地指定要提取的目标。
tar
处理大型
tar
1. 监控大型归档的进度:pv
当你压缩或解压一个非常大的目录时,
tar
pv
pv
创建时:
# 压缩my_huge_data目录,并通过pv监控进度
tar -czf - my_huge_data/ | pv -s $(du -sb my_huge_data/ | awk '{print $1}') > my_huge_data.tar.gz这里
-s
pv
du -sb
tar -czf -
-
|
pv
pv
>
.tar.gz
解压时:
# 解压my_huge_data.tar.gz,并监控进度 pv my_huge_data.tar.gz | tar -xzf -
这里
pv
tar -xzf -
2. 远程服务器上的直接传输和压缩
这是我最常用的技巧之一,尤其是在服务器之间迁移数据或备份时。你可以通过
ssh
从远程服务器压缩并拉取到本地:
ssh user@remote_server "tar -czf - /path/to/remote/directory" > local_backup.tar.gz
这行命令的意思是:通过
ssh
tar -czf - /path/to/remote/directory
-
ssh
local_backup.tar.gz
从本地推送并解压到远程服务器:
tar -czf - /path/to/local/directory | ssh user@remote_server "tar -xzf - -C /path/to/remote/destination"
这行命令的意思是:在本地压缩
/path/to/local/directory
|
ssh
ssh
tar -xzf - -C /path/to/remote/destination
3. 权限和所有权(Permissions and Ownership)
tar
tar
root
sudo
sudo tar -xzvf backup.tar.gz -C /
否则,即使归档中记录了原始所有者,解压后文件所有者也会变成当前执行解压的用户。
4. 磁盘空间管理
处理大型文件时,一定要提前检查目标磁盘是否有足够的空间。
du -sh /path/to/directory
.tar.gz
df -h /path/to/destination
5. 增量备份(Incremental Backups)
对于需要定期备份但数据量巨大的场景,每次都全量备份效率很低。
tar
基本流程是:
tar -czg snapshot.file -f full_backup.tar.gz /path/to/data
tar -czg snapshot.file -f incremental_backup_$(date +%Y%m%d).tar.gz /path/to/data
snapshot.file
tar
这些技巧和注意事项,都是我在实际工作中摸索出来的,希望能帮助你在处理Linux文件压缩和归档时更加得心应手。
以上就是如何在Linux中压缩文件?使用tar命令创建压缩归档文件的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号