Linux tar 怎样用 --files-from 批量读取待打包路径
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 解决的是“名称从哪里来”,不是“目录是否递归”的开关。

用相对路径控制归档里的成员名称
文件列表中的名称会直接影响归档成员名。实际维护时,通常在项目根目录生成相对路径,再把这份清单交给 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 格式。

归档前后的速查与常见误区
| 需求 | 关键写法 | 注意点 |
|---|---|---|
| 从文本文件读路径 | --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。
Linux taskset 怎样把进程固定到指定 CPU 核心
- 上一篇
- Linux taskset 怎样把进程固定到指定 CPU 核心
- 下一篇
- Linux OpenSSL 怎样查看证书链过期时间
-
- 文章 · linux | 24分钟前 | Linux util-linux taskset CPU亲和性 进程调度
- Linux taskset 怎样把进程固定到指定 CPU 核心
- 369浏览 收藏
-
- 文章 · linux | 27分钟前 |
- Linux io_uring 怎样用异步超时限制慢请求
- 356浏览 收藏
-
- 文章 · linux | 31分钟前 |
- Linux systemctl cat 查看服务 unit 主文件与 drop-in 配置
- 225浏览 收藏
-
- 文章 · linux | 36分钟前 |
- Linux nftables 丢弃规则的内核日志记录与前缀配置
- 104浏览 收藏
-
- 文章 · linux | 37分钟前 | Linux · 运维 · Linux hostname unshare UTS namespace 用户命名空间
- Linux unshare 怎样只隔离 UTS 命名空间
- 232浏览 收藏
-
- 文章 · linux | 58分钟前 |
- Linux coredumpctl 怎样按 PID 查看崩溃记录
- 316浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 935次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 939次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 1048次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 1025次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 850次使用
-
- Linux 服务为什么会被 OOM 杀掉:MemoryMax、日志证据与恢复边界
- 2026-08-26 462浏览
-
- Linux pidstat 怎么区分 CPU 忙和 I/O 等待:进程时间、上下文切换与复测方法
- 2026-08-26 252浏览
-
- Linux 文件名含空格时怎么配合使用 find 和 xargs
- 2026-09-05 422浏览
-
- Linux systemd 服务怎么限制打开文件数和进程数
- 2026-09-07 383浏览
-
- Linux mount namespace 修改挂载时怎么避免影响宿主
- 2026-09-08 127浏览

