tar 打包压缩目录

Linux压缩与解压指南

tar -czf small.tar.gz small(目录名)  ;压缩并打包目录
评论
2 楼  Durian 2010-07-23    引用
很有用,解决问题了。
1 楼  verytiny 2008-04-13    引用
Linux下常用压缩格式的压缩与解压方法 
日期:2005-01-20   来源: LinuxByte   作者: Linux爱好者 
.tar 
解包: tar xvf FileName.tar 
打包:tar cvf FileName.tar DirName 
(注:tar是打包,不是压缩!) 
--------------------------------------------- 
.gz 
解压1:gunzip FileName.gz 
解压2:gzip -d FileName.gz 
压缩:gzip FileName 
.tar.gz 
解压:tar zxvf FileName.tar.gz 
压缩:tar zcvf FileName.tar.gz DirName 
--------------------------------------------- 
.bz2 
解压1:bzip2 -d FileName.bz2 
解压2:bunzip2 FileName.bz2 
压缩: bzip2 -z FileName 
.tar.bz2 
解压:tar jxvf FileName.tar.bz2 
压缩:tar jcvf FileName.tar.bz2 DirName 
--------------------------------------------- 
.bz 
解压1:bzip2 -d FileName.bz 
解压2:bunzip2 FileName.bz 
压缩:未知 
.tar.bz 
解压:tar jxvf FileName.tar.bz 
压缩:未知 
--------------------------------------------- 
.Z 
解压:uncompress FileName.Z 
压缩:compress FileName 
.tar.Z 
解压:tar Zxvf FileName.tar.Z 
压缩:tar Zcvf FileName.tar.Z DirName 
--------------------------------------------- 
.tgz 
解压:tar zxvf FileName.tgz 
压缩:未知 
.tar.tgz 
解压:tar zxvf FileName.tar.tgz 
压缩:tar zcvf FileName.tar.tgz FileName 
--------------------------------------------- 
.zip 
解压:unzip FileName.zip 
压缩:zip FileName.zip DirName 
--------------------------------------------- 
.rar 
解压:rar a FileName.rar 
压缩:r ar e FileName.rar 


rar请到:http://www.rarsoft.com/download.htm 下载! 
解压后请将rar_static拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以): 
[root@www2 tmp]# cp rar_static /usr/bin/rar 
--------------------------------------------- 
.lha 
解压:lha -e FileName.lha 
压缩:lha -a FileName.lha FileName 

lha请到:http://www.infor.kanazawa-it.ac.jp/.../lhaunix/下载! 
>解压后请将lha拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以): 
[root@www2 tmp]# cp lha /usr/bin/ 
--------------------------------------------- 
.rpm 
解包:rpm2cpio FileName.rpm | cpio -div 
--------------------------------------------- 
.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh 
.lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea 
解压:sEx x FileName.* 
压缩:sEx a FileName.* FileName 

sEx只是调用相关程序,本身并无压缩、解压功能,请注意! 
sEx请到: http://sourceforge.net/projects/sex下载! 
解压后请将sEx拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以): 
[root@www2 tmp]# cp sEx /usr/bin/ 

<think>我们有一个需求:使用tar命令打包压缩文件夹,但排除顶层目录。这意味着我们想要将文件夹内的所有内容直接打包,而不包含顶层目录本身。例如,假设我们有一个目录结构如下:my_folder/file1.txtsubdir/file2.txt通常,如果我们执行`tarczf archive.tar.gzmy_folder`,那么解压后会得到:archive.tar.gz解压后->my_folder/file1.txt,my_folder/subdir/file2.txt但我们希望解压后直接得到:file1.txtsubdir/file2.txt也就是不要顶层目录my_folder。我们可以使用`-C`选项来改变当前工作目录,然后指定要打包的路径。具体做法是:1.进入要打包目录的父目录。2.使用`tar-czf`命令,并配合`-C`选项,将工作目录切换到目标目录的父目录,然后指定目标目录内的所有内容(即用目标目录的名字加上`/.`来表示该目录下的所有内容)。命令格式:tar -czf[目标压缩文件] -C [父目录路径] [要打包目录内的所有内容]在我们的例子中,假设当前目录下有一个`my_folder`目录,我们想要打包`my_folder`里面的内容(不包括`my_folder`这个目录本身),可以这样做:tar-czf archive.tar.gz-Cmy_folder .解释:- `-Cmy_folder`:表示进入`my_folder`目录(相当于先cd到my_folder)- `.`:表示打包当前目录(即my_folder目录)下的所有内容这样,打包后,解压时就会直接解压出my_folder目录下的所有内容,而不会创建my_folder目录。另一种方法是使用`--transform`选项来重写文件路径,但这里我们要求排除顶层目录,使用`-C`方法更直接。注意:如果我们的目标目录不在当前目录,比如在`/path/to/my_folder`,那么我们可以这样:tar -czfarchive.tar.gz -C /path/tomy_folder但是,这样打包后,解压出来的文件会包含`my_folder`这个顶层目录。所以我们需要改变思路:我们实际上需要进入`/path/to`目录,然后打包`my_folder`目录下的内容(即`my_folder/.`)。所以正确的命令是:tar -czfarchive.tar.gz -C /path/tomy_folder.或者,如果我们已经在`/path/to`目录下,可以直接:tar-czf archive.tar.gz-C.my_folder但是这样仍然会包含`my_folder`。所以正确的方法是,我们想要的是`my_folder`里面的内容,所以应该进入`my_folder`的父目录,然后打包`my_folder`下的所有文件。因此,正确的命令应该是:tar -czfarchive.tar.gz -C /path/to/my_folder .或者,在父目录打包:cd/path/totar-czf archive.tar.gz-Cmy_folder.这样,打包的是`my_folder`下的所有文件,而不会包含`my_folder`这个目录。另外,我们也可以使用`--strip-components`选项在解压时去掉顶层目录,但是这里要求的是打包时排除,所以我们使用打包时的方法。总结:使用`tar-czf archive.tar.gz-C/path/to/parent_foldertarget_folder/.`是不对的,因为这样会包含`target_folder`。所以正确的方式是进入目标目录的内部,打包其内容。即:tar -czfarchive.tar.gz -C /path/to/target_folder.这样,打包的是`target_folder`下的所有内容,而不包含`target_folder`本身。但是,请注意:这样打包后,如果目标目录下有很多文件,那么这些文件就会直接出现在压缩包根目录,可能会导致解压后文件散在多个地方。所以通常我们建议在目标目录下执行打包,或者使用`-C`切换到目标目录。因此,针对用户的问题,我们给出如下解决方案:tar-czf archive.tar.gz-C/path/to/folder_to_compress.其中,`/path/to/folder_to_compress`是要压缩的文件夹的路径,`archive.tar.gz`是压缩后的文件名。示例:假设当前目录下有一个文件夹`project`,我们要打包`project`里面的内容而不包含`project`目录本身:tar -czfproject.tar.gz -C project.解压后,当前目录下会出现`project`目录下的所有文件和子目录。另外,如果我们要打包的文件夹路径较长,也可以先进入其父目录,例如:cd /path/totar -czfarchive.tar.gz -C folder_to_compress .这样效果相同。注意:在压缩包中,所有文件路径都是相对于目标目录的,所以解压后不会创建目标目录本身。如果用户需要同时排除其他文件,可以使用`--exclude`选项,但这里只要求排除顶层目录,所以不需要。参考引用[2]中提到了tar的基本用法,但没有直接提到排除顶层目录的方法。我们这里使用的方法是常见的技巧。因此,我们回答用户:您可以使用以下命令来打包压缩文件夹并排除顶层目录tar-czf目标压缩文件.tar.gz-C要压缩的文件夹的路径 .例如:要压缩当前目录下的`my_folder`文件夹,并排除顶层目录`my_folder`,执行:tar-czf my_archive.tar.gz -C my_folder .这样,解压`my_archive.tar.gz`时,会在当前目录直接得到`my_folder`内的所有内容。注意:命令最后的点`.`表示打包目标文件夹下的所有内容,这个点不能省略。另外,如果压缩包中需要包含多个目录,并且都不希望有顶层目录,那么这种方法就不适用了。但这里只针对一个目录。生成相关问题:</think>### 打包压缩文件夹时排除顶层目录的方法 要使用 `tar` 命令打包文件夹时排除顶层目录,核心方法是**进入目标目录的父目录**,通过 `-C` 参数指定工作目录,然后打包目标目录下的**所有内容**(使用 `./*` 或 `.`)。以下是具体操作: #### 方法 1:直接打包目录内容 ```bash tar -czf 压缩包名.tar.gz -C 目标文件夹的父目录路径 目标文件夹名/. ``` **示例**: 假设要打包 `/home/user/data` 目录(排除顶层 `data` 目录): ```bash tar -czf backup.tar.gz -C /home/user data/. ``` 解压后直接得到 `data` 内部的子目录和文件,不会创建 `data` 目录。 #### 方法 2:使用通配符打包内容 ```bash tar -czf 压缩包名.tar.gz -C 目标文件夹路径 . ``` **示例**: 打包当前目录下的 `project` 文件夹(排除顶层 `project`): ```bash tar -czf project.tar.gz -C project . ``` 解压后得到 `project` 内部的所有文件/子目录。 --- ### 关键参数说明 1. **`-C` 参数** 切换工作目录到指定路径,确保打包时忽略顶层目录结构。 2. **路径结尾的 `/`** `data/.` 中的 `/` 表示目录内容而非目录本身(必须保留)。 3. **压缩选项** - `z`:使用 gzip 压缩(生成 `.tar.gz`) - `j`:使用 bzip2 压缩(生成 `.tar.bz2`) - 移除 `z/j` 可创建未压缩的 `.tar` 包 --- ### 验证结果 解压时检查是否排除顶层目录: ```bash tar -tf backup.tar.gz # 查看压缩包内容 ``` 输出应显示**直接的文件路径**(如 `file.txt`、`subdir/`),而非 `目标文件夹名/file.txt`。 > **注意**:如果路径结尾缺少 `/`(如 `tar -czf ... data`),顶层目录仍会被包含。务必使用 `data/.` 或 `-C ... .` 格式[^1][^2]。 --- ### 相关问题 1. **如何排除特定文件/目录(如 `node_modules`)?** > 使用 `--exclude` 参数: > `tar -czf archive.tar.gz --exclude='node_modules' -C project .` 2. **如何同时打包多个目录并排除各自的顶层目录?** > 需分别打包后合并: > ```bash > tar -cf part1.tar -C dir1 . > tar -cf part2.tar -C dir2 . > tar -Af full.tar part1.tar part2.tar > gzip full.tar > ``` 3. **解压时如何自动跳过顶层目录?** > 使用 `--strip-components=1`: > `tar -xzf archive.tar.gz --strip-components=1` > 这会移除路径中的第一级目录(如解压 `data/file.txt` 得到 `file.txt`)[^2]。 4. **`tar` 和其他压缩工具(如 `zip`)在排除目录时的区别?** > `zip` 需显式指定文件: > `zip -r archive.zip path/to/folder/* -x "*/顶层目录名"` > 而 `tar` 通过路径控制更灵活[^3]。 [^1]: `tar` 命令通过 `-C` 切换工作目录打包指定路径的内容,是处理目录结构的核心方法。 [^2]: 路径结尾的 `/` 和通配符 `*` 可控制是否包含目录本身,需与 `-C` 配合使用。 [^3]: 对比 `tar` 和 `zip` 的排除逻辑,`tar` 的路径操作更直接,而 `zip` 依赖通配符过滤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值