Linux TAR备份文件时排除指定文件

本文介绍如何使用Linux下的TAR命令来备份Oracle数据库目录,并详细解释如何排除特定文件或目录,如.ora文件和整个network目录,同时提供了一个具体的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle数据库备份,使用linux tar备份数据库目录时指定排除不备份指定文件。(长知识了)
在升级或者打PSU的时候都需要对ORACLE的ORACLE HOME进行备份,通常我们使用TAR命令来打包文件夹后再压缩。由于一些日志文件比较大,我们常常在TAR过程中需要排除一些日志文件或者一些特殊的文件。下面测试一下TAR的-X命令

1,MAN TAR查看X参数的说明

   -X, --exclude-from FILE
              exclude files listed in FILE

2,生成排除文件

这里使用find命令来生成排除文件,以ORACLE_HOME中.ora结尾的文件为例,排除所有.ora文件结尾的文件
[root@oracleplus.net db_1123]# cd /oracle/app/oracle/product/11.2.0/db_1123/
[root@oracleplus.net db_1123]# find ./ -name *.ora >/tmp/excludefile.txt
[root@oracleplus.net db_1123]# cat /tmp/excludefile.txt
./dbs/init.ora
./dbs/spfileorcl1123.ora
./dbs/spfilecos11g.ora
./dbs/spfileorcl1024.ora
./hs/admin/extproc.ora
./hs/admin/initdg4odbc.ora
./mgw/admin/sample_mgw.ora
./network/admin/samples/listener.ora
./network/admin/samples/sqlnet.ora
./network/admin/samples/tnsnames.ora
./network/admin/listener.ora
./network/admin/tnsnames.ora
./rdbms/admin/externaljob.ora
./rdbms/install/filemap.ora
./srvm/admin/init.ora
./orcl9i_orcl1123/sysman/config/emkey.ora
./orcl9i_orcl1123/sysman/config/server/repoconn.ora

3 TAR备份ORACLE_HOME

这里使用TAR将ORACLE_HOME备份到_back目录下面
root@oracleplus.net db_1123]# tar cpfX - /tmp/excludefile.txt .|(cd /oracle/app/oracle/product/11.2.0/db_1123_back;tar -xf -)

[root@oracleplus.net db_1123]#du -sk
4520316 .

[oracle@oracleplus.net db_1123_back]$du -sk
4520204 .
从大小来看,_back目录比原文件小

[oracle@oracleplus.net db_1123_back]$find ./ -name *.ora
这里没有看到任何的文件
[oracle@oracleplus.net db_1123_back]$ls -l ./rdbms/install/filemap.ora
ls: ./rdbms/install/filemap.ora: No such file or directory

这里可以看到,已经没有生成任何的.ora结尾的文件了

4 排除整个目录文件

这里以$ORACLE_HOME/network目录为例,排除network下所有的文件,这里需要注意的是只能排除文件,不能排除目录,所以原目录还是存在,只是没有文件存在
[root@oracleplus.net db_1123]#find network -type f>>/tmp/excludefile.txt
[root@oracleplus.net db_1123]#wc -l /tmp/excludefile.txt
321 /tmp/excludefile.txt
[root@oracleplus.net db_1123]# tar cpfX - /tmp/excludefile.txt .|(cd /oracle/app/oracle/product/11.2.0/db_1123_back;tar -xf -)
[root@oracleplus.net db_1123]#du -s
4520328 .
[oracle@oracleplus.net db_1123_back]$du -s
4512908 .

通过下面的信息,我们可以看到排除network中所有的文件,但是目录结构还保留。
[oracle@oracleplus.net db_1123_back]$cd network/admin
[oracle@oracleplus.net admin]$ls
samples
[oracle@oracleplus.net admin]$cd samples
[oracle@oracleplus.net samples]$ls

5 TAR备份与压缩

在linux环境可以通过-z参数来压缩打包文件,但是在其它的命令中并不存在此参数,所以我们需要通过其它命令来对tar包进行压缩
[root@oracleplus.net db_1123]#tar cpfX - /tmp/excludefile.txt .|gzip - >/tmp/oracle_home.tar.gz
OK,整个测试结束

原文网址:http://www.oracleplus.net/arch/1202.html

<think>好的,用户现在问的是如何使用tar指令打包指定目录,并且排除指定后缀的文件。我需要先回忆一下tar命令的相关参数,尤其是排除文件的选项。记得tar有一个--exclude参数,可以用来排除特定的文件或目录。 用户可能是在进行文件备份或者部署,需要打包某个目录,但想包含某些类型的文件,比如日志文件、临文件或者编译生成的文件。这排除特定后缀的文件就显得很重要了。比如排除.log或者.tmp文件。 接下来,我需要确认用户的操作系统环境,因为同的系统可能有细微的差别,比如在macOS和Linux中,tar的版本可能同,但通常排除参数的用法是类似的。过用户可能没有说明,所以我需要给出通用的方法,同如果有平台差异的话也需要提及。 另外,用户可能需要排除多个后缀,这候需要多次使用--exclude参数,或者使用通配符。例如,--exclude="*.log" --exclude="*.tmp"。或者是否可以用模式匹配一次排除多个后缀?比如--exclude="*.{log,tmp}",但确定是否所有版本的tar都支持这种语法,可能需要测试一下。为了保险起见,还是建议分开写多个--exclude参数。 然后,需要给出具体的命令示例。比如:tar -czvf archive.tar.gz --exclude="*.log" --exclude="*.tmp" /path/to/directory。这里要注意路径的位置,确保排除模式正确应用在目标目录上。如果用户是在当前目录下打包,可能需要调整路径。 还有,用户可能会遇到需要排除隐藏文件的情况,比如.git目录或者其他以点开头的文件,这候可能需要另外的排除参数。过用户的问题是关于指定后缀的,所以这个可能在当前范围内,但可以作为扩展知识提一下。 需要提醒用户注意排除模式的引号使用,避免shell自动扩展。比如使用双引号或者单引号包裹排除模式,防止shell将其解释为通配符。例如--exclude='*.log'。 另外,是否有其他方法可以实现排除,比如使用find命令结合tar?比如先使用find查找需要的文件,再通过tar打包。过这可能比较复杂,但对于处理大量文件或更复杂的排除规则可能更灵活。但用户的问题可能更倾向于直接使用tar的内置参数,所以应该以--exclude为主。 最后,验证示例命令是否正确。例如,打包/path/to/directory目录,排除所有.log和.tmp文件,生成压缩包archive.tar.gz。确保命令中的选项顺序正确,比如-czvf是创建、压缩、显示进度、指定文件名,这些参数的顺序是否正确,以及排除参数是否放在路径前面,因为tar的参数顺序很重要,排除选项必须在路径之前,否则可能生效。 可能用户还会想知道如何查看打包后的文件列表,确认排除是否成功。这候可以用tar -tzvf archive.tar.gz来列出内容,检查是否还有被排除文件。 另外,是否需要考虑排除大小写?比如排除.log是否也会排除.LOG文件?这取决于文件系统是否区分大小写,但一般来说,tar的匹配是大小写敏感的,所以需要用户根据实际情况调整。 总结一下,用户的需求是打包指定目录并排除特定后缀文件,核心是正确使用tar的--exclude参数,给出具体命令示例,并提醒注意事项,比如参数顺序、引号使用、多个排除项的处理等。</think>以下是使用 `tar` 指令打包指定目录并排除特定后缀文件的详细指南: --- ### 一、基础命令格式 ```bash tar -czvf 压缩包名.tar.gz \ --exclude="*.后缀1" \ --exclude="*.后缀2" \ 目标目录路径 ``` #### 参数解析 - `-c`: 创建新压缩包 - `-z`: 使用gzip压缩 - `-v`: 显示压缩过程 - `-f`: 指定压缩文件名 - `--exclude`: 排除匹配模式的文件 --- ### 二、实用案例演示 #### 案例1:排除单个文件类型 ```bash # 打包/home/user/docs目录,排除所有.log文件 tar -czvf backup.tar.gz \ --exclude="*.log" \ /home/user/docs ``` #### 案例2:排除多个文件类型 ```bash # 排除文件和缓存文件 tar -czvf project_backup.tar.gz \ --exclude="*.tmp" \ --exclude="*.cache" \ --exclude="*.swp" \ /var/www/project ``` #### 案例3:使用通配符排除复杂模式 ```bash # 排除所有数字结尾的.log文件(如error_2023.log) tar -czvf logs_clean.tar.gz \ --exclude="*[0-9].log" \ /var/log ``` --- ### 三、高级技巧 #### 1. 从文件读取排除列表 ```bash # 创建排除列表文件 echo "*.mp4" > exclude.list echo "*.zip" >> exclude.list # 使用-X参数加载排除列表 tar -czvf media_backup.tar.gz \ -X exclude.list \ /home/media ``` #### 2. 组合find命令实现动态排除 ```bash # 查找超过100MB的大文件排除 find /data -type f -size +100M -print > large_files.list tar -czvf data_light.tar.gz \ -X large_files.list \ /data ``` --- ### 四、注意事项 1. **路径敏感性** - 排除模式需与文件相对路径匹配 - 示例:要排除`/home/user/docs/temp/`目录,应使用: ```bash --exclude="docs/temp" ``` 2. **特殊字符转义** - 当路径包含空格使用引号: ```bash --exclude="Important Documents/*.pdf" ``` 3. **隐藏文件处理** - 排除隐藏文件(以`.`开头的文件): ```bash --exclude=".*" ``` --- ### 五、验证压缩包内容 ```bash # 列出压缩包内文件实际解压) tar -tzvf backup.tar.gz ``` --- ### 六、跨平台差异 | 系统特性 | Linux | macOS | |---------------|----------------------|---------------------| | 默认tar版本 | GNU tar | BSD tar | | 通配符支持 | 支持`*`和`?` | 需加`--include`配合 | | 排除目录语法 | `--exclude="dir/"` | `--exclude="dir"` | --- 通过以上方法,可以灵活控制打包内容。建议先通过`--dry-run`参数测试排除效果: ```bash tar -czvf test.tar.gz \ --exclude="*.tmp" \ --dry-run \ /target/dir ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值