# 主操作模式:-A, --catenate, --concatenate 追加 tar 文件至归档-c, --create 创建一个新归档--delete 从归档(非磁带!)中删除-d, --diff, --compare 找出归档和文件系统的差异-r, --append 追加文件至归档结尾--test-label 测试归档卷标并退出-t, --list 列出归档内容-u, --update 仅追加比归档中副本更新的文件-x, --extract, --get 从归档中解出文件# 压缩选项:-a, --auto-compress 使用归档后缀名来决定压缩程序-I, --use-compress-program=PROG通过 PROG 过滤(必须是能接受 -d选项的程序)-j, --bzip2 通过 bzip2 过滤归档-J, --xz 通过 xz 过滤归档--lzip 通过 lzip 过滤归档--lzma 通过 xz 过滤归档--lzop 通过 lzop 过滤归档--no-auto-compress 不使用归档后缀名来决定压缩程序--zstd 通过 zstd 过滤归档-z, --gzip, --gunzip, --ungzip 通过 gzip 过滤归档-Z, --compress, --uncompress 通过 compress 过滤归档摘要:# 主操作模式:-A, --catenate, --concatenate 追加 tar 文件至归档-c, --create 创建一个新归档--delete 从归档(非磁带!)中删除-d, --diff, --compare 找出归档和文件系统的差异-r, -
创建一个简单的文件夹归档使用-cf选项:
demouser@demohosts:~$ tar -cf ./compose-file.tar ./compose-file/如果想看上面的压缩过程中哪些文件和目录被添加到归档中的详细输出显示,使用 -v 选项:
demouser@demohosts:~$ tar -cvf ./compose-file.tar ./compose-file/./compose-file/./compose-file/docker-gitlab.yml./compose-file/docker-compose.yml./compose-file/docker-compose-linux-x86_64./compose-file/docker-lskypro.yml要将一个文件夹归档为gzip的压缩格式时使用 -z 选项:
demouser@demohosts:~$ tar -czvf ./compose-file.tar.gz ./compose-file/./compose-file/./compose-file/docker-gitlab.yml./compose-file/docker-compose.yml./compose-file/docker-compose-linux-x86_64./compose-file/docker-lskypro.yml要将一个文件夹归档为bzip2的压缩格式时使用 -j 选项:
demouser@demohosts:~$ tar -cjvf ./compose-file.tar.bz2 ./compose-file/./compose-file/./compose-file/docker-gitlab.yml./compose-file/docker-compose.yml./compose-file/docker-compose-linux-x86_64./compose-file/docker-lskypro.yml要将一个文件夹归档为xz的压缩格式时使用 -J 选项:
demouser@demohosts:~$ tar -cJvf ./compose-file.tar.xz ./compose-file/./compose-file/./compose-file/docker-gitlab.yml./compose-file/docker-compose.yml./compose-file/docker-compose-linux-x86_64./compose-file/docker-lskypro.yml下面是一个从当前位置的存档文件中提取文件夹的示例:
demouser@demohosts:~$ tar -xvf compose-file.tar./compose-file/./compose-file/docker-gitlab.yml./compose-file/docker-compose.yml./compose-file/docker-compose-linux-x86_64./compose-file/docker-lskypro.yml如果你想将归档文件中的文件/目录解压缩到特定的目的地,可以使用-C 选项:
demouser@demohosts:~$ tar -xvf compose-file.tar -C ./compose-file/./compose-file/./compose-file/docker-gitlab.yml./compose-file/docker-compose.yml./compose-file/docker-compose-linux-x86_64./compose-file/docker-lskypro.yml不解压列出归档文件中的内容:
demouser@demohosts:~$ tar -tf compose-file.tar ./compose-file/./compose-file/docker-gitlab.yml./compose-file/docker-compose.yml./compose-file/docker-compose-linux-x86_64./compose-file/docker-lskypro.yml下面是一个列出内容详细信息的例子:
demouser@demohosts:~$ tar -tvf compose-file.tar drwxrwxr-x demouser/demouser 0 2024-11-05 13:35 ./compose-file/-rw-rw-r-- demouser/demouser 428 2024-10-31 22:32 ./compose-file/docker-gitlab.yml-rw-rw-r-- demouser/demouser 886 2024-10-31 21:19 ./compose-file/docker-compose.yml-rwxrwxr-x demouser/demouser 620528 2024-11-02 10:52 ./compose-file/docker-compose-linux-x86_64-rw-rw-r-- demouser/demouser 155 2024-11-01 22:32 ./compose-file/docker-lskypro.yml选项 -t 用于列出。要列出 tar.gz 归档文件的内容,你必须再使用 -z 选项:
demouser@demohosts:~$ tar -tzvf compose-file.tar.gzdrwxrwxr-x demouser/demouser 0 2024-11-05 13:35 ./compose-file/-rw-rw-r-- demouser/demouser 428 2024-10-31 22:32 ./compose-file/docker-gitlab.yml-rw-rw-r-- demouser/demouser 886 2024-10-31 21:19 ./compose-file/docker-compose.yml-rwxrwxr-x demouser/demouser 620528 2024-11-02 10:52 ./compose-file/docker-compose-linux-x86_64-rw-rw-r-- demouser/demouser 155 2024-11-01 22:32 ./compose-file/docker-lskypro.yml上面例子中压缩文件用的文件夹里面的树结构是这样的:
demouser@demohosts:~$ tree compose-filecompose-file├── docker-compose-linux-x86_64├── docker-compose.yml├── docker-gitlab.yml└── docker-lskypro.yml1 directory, 4 files如果要压缩一个文件夹,但希望在压缩的过程中排除一个或几个文件夹,可以使用 --exclude 选项。比如目录中的docker-compose-linux-x86_64是个可执行文件,docker-compose.yml是个示例文件,不想一起归档,可以像下面这样执行:
demouser@demohosts:~$ tar -cf compose-file.tar --exclude="./compose-file/docker-compose-linux-x86_64" --exclude="./compose-file/docker-compose.yml" ./compose-file/这样执行后的结果就如下:
demouser@demohosts:~$ tar -tf compose-file.tar./compose-file/./compose-file/docker-gitlab.yml./compose-file/docker-lskypro.yml当我们压缩整个目录的时候,归档文件是连同顶层的目录一起打包到归档文件中去,这样在使用-C指定目标解压路径时,就可能解压后多了一层目录。导致路径的深度多了一层,造成一些不必要的麻烦。例如下面的这个例子:
demouser@demohosts:~$ tar xvzf compose-file.tar.gz -C ./compose-file/./compose-file/./compose-file/docker-gitlab.yml./compose-file/docker-compose.yml./compose-file/docker-compose-linux-x86_64./compose-file/docker-lskypro.ymldemouser@demohosts:~$ tree compose-filecompose-file└── compose-file├── docker-compose-linux-x86_64├── docker-compose.yml├── docker-gitlab.yml└── docker-lskypro.yml此时可以使用--strip-components=NUMBER选项,帮助文档中的解释如下,估计是翻译的问题
--strip-components=NUMBER 解压时从文件名中清除 NUMBER 个引导部分上面的例子中,如果我们不想要第二个compose-file目录就可以这样搭配选项:
demouser@demohosts:~$ tree compose-filecompose-file0 directories, 0 filesdemouser@demohosts:~$ tar xvzf compose-file.tar.gz -C ./compose-file/ --strip-components=2./compose-file/docker-gitlab.yml./compose-file/docker-compose.yml./compose-file/docker-compose-linux-x86_64./compose-file/docker-lskypro.ymldemouser@demohosts:~$ tree compose-filecompose-file├── docker-compose-linux-x86_64├── docker-compose.yml├── docker-gitlab.yml└── docker-lskypro.yml1 directory, 4 files如果您对我的文章有兴趣,我把我发布的文章都归档到我私人网站中去,欢迎访问 Corner 三的小角落 -- 首页 查阅之前的文章。
来源:英雄热血域