当前位置:首页 > 文章列表 > 文章 > linux > Linux tar 怎样用 --files-from 批量读取待打包路径

Linux tar 怎样用 --files-from 批量读取待打包路径

来源:17golang原创 2026-11-08 04:09:18 0浏览 收藏

Linux tar 处理长文件清单时,不必把几百个路径全部展开在命令行上。使用 --files-from(短写法 -T)即可让 tar 从文件或标准输入读取待归档名称;如果文件名可能包含空格、换行或以短横线开头,再配合 --null 与 --verbatim-files-from,边界会更清楚。

官方地址:https://www.gnu.org/software/tar/manual/html_section/files.html

最小可用写法是 tar --create --gzip --file=archive.tar.gz --files-from=files.txt。列表中的每个名称都会成为归档输入;目录是否继续展开、名称怎样分隔,则由后续选项决定。

用 --files-from 读取长文件清单

--files-from=FILE 或 -T FILE 把路径来源从命令行移到文件。列表文件通常每行一个名称,也可以把 - 作为 FILE,让 tar 从标准输入读取。这个方式适合由上游脚本生成清单,也能避免命令行长度成为限制。

# files.txt 每行放一个相对路径,便于控制归档内的名称
tar --create --gzip --file=archive.tar.gz --files-from=files.txt

# 用标准输入接收上游命令产生的列表
find ./project -type f -name '*.conf' -print \
  | tar --create --gzip --file=project-conf.tar.gz --files-from=-

列表里的目录默认仍可能带出目录下的内容;如果只想收录列出的目录条目,可以增加 --no-recursion。因此,-T 解决的是“名称从哪里来”,不是“目录是否递归”的开关。

files.txt、标准输入、--files-from、路径条目、目录递归和 archive.tar.gz 的静态结构关系说明图
图1:文件列表到归档成员的结构说明图,展示 --files-from 读取路径后的数据边界。

用相对路径控制归档里的成员名称

文件列表中的名称会直接影响归档成员名。实际维护时,通常在项目根目录生成相对路径,再把这份清单交给 tar;这样解包时更容易保持预期的目录层级,也不必把本机绝对路径暴露给归档。

# 先进入项目根目录,让清单记录相对名称
cd /srv/app

# 清单中的路径相对当前目录写入归档
tar --create --file=/tmp/app.tar --files-from=/srv/app/files.txt

# 只读取清单里的目录项,不继续向下遍历
tar --create --file=/tmp/app-norecurse.tar \
  --no-recursion --files-from=/srv/app/files.txt

这里要区分两个问题:工作目录决定名称如何组织,--no-recursion 决定目录条目是否继续展开。不要把它们混成“排除目录”的用法;需要排除模式时,应使用单独的排除选项。

用 --null 处理特殊文件名

换行分隔的列表适合普通文件名,但文件名本身可能包含空格或换行。更稳妥的组合是上游用 find -print0 产生 NUL 分隔名称,tar 侧用 --null 读取;--verbatim-files-from 则明确告诉 GNU tar 按原样处理列表中的名称,避免把名称中的特殊形式当作额外语法。

# -print0 与 --null 使用同一种 NUL 分隔,避免换行文件名被拆开
find ./project -type f -print0 \
  | tar --create --gzip --file=project.tar.gz \
      --null --verbatim-files-from --files-from=-

要点只有三个:生成端和读取端的分隔协议要一致;--null 要作用于后面的文件列表;列表中的名称不要再额外拼接 shell 引号。若使用普通文本文件,先确认它确实是一行一个路径,再决定是否需要 NUL 格式。

换行列表、NUL 分隔、find -print0、--null、--verbatim-files-from 与特殊文件名的静态依赖关系说明图
图2:文件名边界说明图,对比换行列表与 NUL 分隔列表的静态输入关系。

归档前后的速查与常见误区

需求关键写法注意点
从文本文件读路径--files-from=files.txt通常一行一个名称
从管道读路径--files-from=-标准输入不能同时承担别的用途
处理换行文件名--null --verbatim-files-from上游应使用 -print0
不展开目录--no-recursion只影响目录递归,不改变列表来源

归档完成后,可以用 tar --list --file=archive.tar.gz 查看成员清单。这个动作只读取归档目录,不会把它当成“重新打包”;它适合确认列表中的名称是否进入了预期的归档边界。

相关问题

列表里有以短横线开头的文件名怎么办?

不要依赖 shell 的引号来改变 tar 对文件列表的解析方式。使用 GNU tar 支持的 --verbatim-files-from,并结合明确的列表格式处理名称。

--files-from 能不能读取目录?

可以读取目录条目;是否继续收录目录内容由递归设置决定。需要只收录清单中的目录名时,使用 --no-recursion。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Linux taskset 怎样把进程固定到指定 CPU 核心Linux taskset 怎样把进程固定到指定 CPU 核心
上一篇
Linux taskset 怎样把进程固定到指定 CPU 核心
Linux OpenSSL 怎样查看证书链过期时间
下一篇
Linux OpenSSL 怎样查看证书链过期时间
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    935次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    939次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    1048次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    1025次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    850次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码