Linux 压缩 怎样只压缩文件,不要包含路径?

哈,你说的这个tar命令用法,我之前在2 02 3 年帮隔壁部门搞服务器备份的时候踩过坑,还真有点东西。

不过啊,你那个例子里有个小问题,我跟你讲讲。
你看这个命令: bash $ tar -czvf file.tar.gz /home/user/ -C /home/user
你这样写其实会报错的。
因为-C这个选项,是让tar命令先切换到指定的目录,然后再打包里面的东西。
但这个用法有点反直觉,通常我们都是先定好要打包的内容,再去切换目录。
正确的写法应该是: bash $ tar -czvf file.tar.gz --transform 's,^/home/user/' /home/user/
或者更简单点,直接打包的时候忽略路径: bash $ tar -czvf file.tar.gz --no-recursion /home/user/
你看,这样打包出来的file.tar.gz里就不会带/home/user/这个路径了。

还有那个排除特定目录的部分,你那个例子: bash $ tar -czvf file.tar.gz /home//etc --exclude=/home/dmtsai
这样写其实不对,因为--exclude后面得跟具体的文件或目录路径。
正确的应该是: bash $ tar -czvf file.tar.gz /home//etc --exclude='/home/dmtsai/'
或者用更通用的模式: bash $ tar -czvf file.tar.gz /home//etc --exclude='dmtsai'
你看,这样就能正确排除掉/home/dmtsai这个目录下的所有内容了。

其他部分你说的都挺对的。
特别是解压缩的时候用-C指定目录,我经常用。
比如: bash $ tar -zxvf file.tar.gz -C /destination/path
这样就不用手动去/destination/path目录下再创建子目录了,挺方便的。

不过啊,我有个小建议。
你在用tar打包重要文件前,最好先用-p选项试试,看看路径会不会被错误处理。
比如打包/etc/passwd时,不加-p可能会保留文件权限,但加-p就能保留所有元数据,包括路径。
像我在2 02 2 年调试一次系统迁移时,就因为这个差点搞砸。

反正你看着办吧,tar命令用顺了还是挺强大的。

linux系统.tar.gz解压文件的使用方法

我记得有一次,在实验室里,我需要将一个大数据集解压,因为它是用.tar.gz格式压缩的。
我坐在一台Ubuntu服务器前,屏幕上闪烁着命令行界面。
我打开终端,输入了tar -xzvf h3_data_set.tar.gz,心里想着这命令应该没问题。
然后,我听到硬盘嗡嗡作响,屏幕上开始出现文件列表。
我点了点鼠标,切换到另一个终端窗口,用ls -l检查了目录,发现文件已经从压缩包里出来了。
我松了口气,但突然想到,如果当时把数据解压到另一个目录,而不是当前目录,事情会不会更简单?等等,还有个事,我突然想到,如果当时解压文件时,我加上了-v参数,我就能实时看到解压的进度,那会是个怎样的体验呢?