You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

tar 1.34版本中排除目录后重新包含特定文件的命令选项问询

tar 1.34版本中排除目录后重新包含特定文件的命令选项问询

嗨,这个问题其实在tar的规则里有明确的处理方式,我来给你讲两种纯tar命令的可行方案,完全符合你1.34版本的要求:

方法一:直接追加特定文件路径(最直观简单)

tar的--exclude规则主要作用于遍历目录时自动匹配的内容,而你手动明确指定的文件路径不会受这些排除规则影响。所以你只需要把目标文件的完整路径添加到命令最后,作为单独的归档目标即可。

修改后的命令如下:

cd /
tar \
--exclude=thisdir  --exclude=thatdir  \
--exclude=logs     --exclude=tmp      \
-czf "$backup_file" \
etc  \
home \
/home/my_user/logs/important.log

这样执行后,home目录下所有logs子目录都会被排除,但你单独指定的/home/my_user/logs/important.log会被正常加入归档。

方法二:调整include/exclude规则顺序

如果你不想单独追加文件路径,也可以通过调整规则顺序实现。核心逻辑是:更具体的匹配规则要放在前面,因为tar会按顺序应用规则,第一个匹配的规则生效。同时不要直接排除整个logs目录,而是排除目录内除目标文件外的所有内容,让tar有机会扫描目录内的文件。

修改后的命令如下:

cd /
tar \
--exclude=thisdir  --exclude=thatdir  \
--exclude=tmp \
--include='/home/my_user/logs/important.log' \
--exclude='logs/*' \
-czf "$backup_file" \
etc  \
home

这里要注意两个关键点:

  • --include规则放在--exclude='logs/*'前面,确保tar遍历到目标文件时,先匹配到包含规则;
  • --exclude='logs/*'替代原来的--exclude=logs,这样是排除logs目录下的所有内容,而非整个目录,tar会进入目录扫描文件,从而触发include规则。

两种方案都能满足你的需求,第一种更直观好维护,推荐优先使用。

备注:内容来源于stack exchange,提问作者FedKad

火山引擎 最新活动