Linux下tar命令exclude选项排除指定文件或目录

本文详细介绍如何使用Linux下的tar命令来打包目录,并展示了如何排除特定类型的文件或目录,以实现更灵活的数据备份。

  在linux中可以用tar打包目录以方便传输or备份,我们先来看一个例子

test 文件夹有如下文件

1
2
3
4
5
6
7
8
9
10
[root@lee ~]# ll test
总用量 8
-rw-r--r--. 1 root root    0 4月  14 22:18 a.jpg
-rw-r--r--. 1 root root    0 4月  14 22:25 a.log
-rw-r--r--. 1 root root    0 4月  14 22:18 a.txt
-rw-r--r--. 1 root root    0 4月  14 22:18 b.jpg
-rw-r--r--. 1 root root    0 4月  14 22:25 b.log
-rw-r--r--. 1 root root    0 4月  14 22:18 b.txt
drwxr-xr-x. 2 root root 4096 4月  14 22:18 dir1
drwxr-xr-x. 2 root root 4096 4月  14 22:18 dir2

打包

1
2
3
4
5
6
7
8
9
10
11
12
[root@lee ~]#  tar -cvf test.tgz test/
test/
test/b.jpg
test/b.txt
test/dir2/
test/b.log
test/dir1/
test/dir1/b.txt
test/dir1/a.txt
test/a.jpg
test/a.txt
test/a.log

这样是打包全部文件,我们需要排除jpg文件可以这么弄

1
2
3
4
5
6
7
8
9
10
11
[root@lee ~]#  tar -cvf test.tgz test/ --exclude *.jpg
test/
test/b.txt
test/dir2/
test/b.log
test/dir1/
test/dir1/b.txt
test/dir1/a.txt
test/a.txt
test/a.log
[root@lee ~]#

这样,就会把jpg后缀的文件都排除了,包括子目录!

如果是多个后缀类型需要被排除可以在后面添加,无限制

1
2
3
4
5
6
7
[root@lee ~]#  tar -cvf test.tgz test/ --exclude *.txt --exclude *.jpg
test/
test/dir2/
test/b.log
test/dir1/
test/a.log
[root@lee ~]#

以上是匹配排除某个文件类型后缀,也可以直接指定文件名

1
2
3
4
5
6
7
8
9
10
11
[root@lee ~]#  tar -cvf test.tgz test/ --exclude a.txt
test/
test/b.jpg
test/b.txt
test/dir2/
test/b.log
test/dir1/
test/dir1/b.txt
test/a.jpg
test/a.log
[root@lee ~]#

或者指定目录

1
2
3
4
5
6
7
8
9
10
[root@lee ~]#  tar -cvf test.tgz test/ --exclude dir1
test/
test/b.jpg
test/b.txt
test/dir2/
test/b.log
test/a.jpg
test/a.txt
test/a.log
[root@lee ~]#

也可以排除目录与文件一起混合使用,如:

1
2
3
4
5
6
7
[root@lee ~]#  tar -cvf test.tgz test/ --exclude dir1 --exclude a.log --exclude *.jpg
test/
test/b.txt
test/dir2/
test/b.log
test/a.txt
[root@lee ~]#
<think>我们正在讨论的是使用tar命令文件打包到指定目录的方法。根据引用[2]和引用[3]的内容,tar命令的基本用法已经给出,但我们需要特别关注如何将文件打包到指定目录(即压缩包生成的路径)。 在tar命令中,我们可以通过两种方式实现: 1. 在压缩命令中直接指定压缩包的完整路径(包括目录文件名)。 2. 先切换到目标目录,再执行压缩命令(这样压缩包就会生成在当前目录)。 另外,引用[3]提到解压时可以用-C参数指定解压目录,但压缩时并没有类似的选项。因此,我们只能通过上述两种方式之一来实现。 具体步骤: 方法一:指定完整路径 在压缩命令中,将压缩包的路径写全。例如,将当前目录下的所有.jpg文件打包到/backup目录下,并命名为images.tar.gz: tar zcvf /backup/images.tar.gz *.jpg 方法二:切换到目标目录再压缩 cd /backup tar zcvf images.tar.gz /path/to/source/*.jpg # 注意这里源文件要用绝对路径,者如果源文件在当前目录的上级目录,也可以用相对路径 但是注意:方法二如果不注意源文件的路径,可能会在压缩包中保留完整的路径结构。为了避免在压缩包中保留冗长的路径,我们通常可以在源文件所在目录进行打包,然后通过-C参数改变当前目录(但注意,-C参数在压缩时用于改变当前目录,从而避免将整个路径结构打包进去)。然而,我们这里的目标是控制压缩包的输出位置,而不是控制压缩包内的路径。 另外,还有一种常用的方法是:在源文件所在目录打包,然后通过输出重定向者mv命令将压缩包移动到指定目录。但是,tar命令的-f选项可以指定输出文件,所以我们可以直接指定输出文件的路径。 举例:将/home/user/data目录下的所有文件打包到/backup目录,生成backup.tar.gz tar zcvf /backup/backup.tar.gz -C /home/user/data . 解释:-C /home/user/data 表示切换到/home/user/data目录,然后将当前目录(即data目录)下的所有文件(用.表示)打包。这样打包后,压缩包内没有多余的路径,直接就是data目录下的内容。而压缩包则输出到/backup/backup.tar.gz。 所以,如果不想在压缩包内包含整个路径结构,推荐使用-C参数。 总结步骤: 1. 确定要打包的源文件目录。 2. 确定压缩包的输出路径和文件名。 3. 使用tar命令,通过-f指定输出文件(包含完整路径),通过-C参数切换到源文件所在目录,然后指定要打包的文件。 例如:将/home/user/project目录打包到/tmp/project_backup.tar.gz tar zcvf /tmp/project_backup.tar.gz -C /home/user project 注意:上面的命令中,-C /home/user 表示切换到/home/user目录,然后打包project目录(该目录是/home/user下的子目录)。这样压缩包内就只有project目录,而不会包含/home/user。 如果想打包多个目录文件,可以在命令后面列出,但要注意这些路径是相对于-C参数指定目录的。 另外,如果不想包含目录本身,而只想打包目录下的所有内容,可以在目录路径后面加上一个点(.): tar zcvf /tmp/project_backup.tar.gz -C /home/user/project . 这样打包后,解压时会直接将文件解压到当前目录(没有project这一层目录)。 因此,根据需求选择合适的方式。 生成相关问题: 1. 如何用tar命令排除特定文件目录? 2. 如何解压tar压缩包到指定目录? 3. 如何查看tar压缩包的内容而不解压? 4. tar命令如何同时压缩多个目录文件? </think>### Linux中使用tar命令打包文件指定目录的方法 在Linux系统中,使用tar命令文件打包到指定目录主要通过`-f`参数实现目标路径的精确控制。以下是具体方法: #### 方法一:直接指定完整输出路径(推荐) ```bash tar zcvf /目标目录/压缩包名.tar.gz 源文件目录 ``` - **示例**:将当前目录所有`.log`文件打包到`/backup`目录 ```bash tar zcvf /backup/logs_archive.tar.gz *.log ``` - **特点**: - 单条命令完成打包和路径指定 - 支持绝对路径和相对路径[^2] - 保留完整的文件目录结构 #### 方法二:结合`-C`参数改变工作目录 ```bash (cd 源目录 && tar zcvf /目标目录/压缩包名.tar.gz .) ``` - **示例**:打包`/var/www`内容到`/backup/web.tar.gz` ```bash (cd /var/www && tar zcvf /backup/web.tar.gz .) ``` - **优势**: - 避免包含父目录路径 - 适用于打包目录内容而非目录本身 - 保持压缩包内路径简洁[^3] #### 方法三:使用管道重定向 ```bash tar zcv -C 源目录 . > /目标目录/压缩包名.tar.gz ``` - **示例**:打包当前目录到`/mnt/backup/current.tgz` ```bash tar zcv -C . . > /mnt/backup/current.tgz ``` #### 关键参数说明: | 参数 | 作用 | 示例 | |------|------|------| | `z` | gzip压缩/解压 | `tar zcvf` | | `c` | 创建新压缩包 | 必须使用 | | `v` | 显示处理过程 | 可省略 | | `f` | 指定文件名 | **必须最后出现** | | `-C` | 切换工作目录 | `tar -C /path` | > **注意事项**: > 1. `-f`参数必须放在参数列表最后[^2] > 2. 目标目录需提前创建(`mkdir -p /目标目录`) > 3. 使用绝对路径可避免路径错误 > 4. 添加`--exclude=模式`可排除特定文件
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值