ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux 命令大全之 basename 详解:从路径提取基本名称与 Shell 脚本文件重命名实战

Linux 命令大全之 basename 详解:从路径提取基本名称与 Shell 脚本文件重命名实战 文档教程【免费下载链接】linux-commandLinux命令大全搜索工具内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux项目地址https://gitcode.com/GitHub_Trending/linux/linux-command点击查看免费下载本文基于 Linux 命令大全linux-command仓库中的 basename 命令文档完整讲解 basename 命令的语法、选项、参数与实战用法包括如何从带路径的文件名中剥离目录、如何结合命令替换构造同名前缀、异后缀的输出文件名并对照仓库中 dirname 命令文档 与 构建脚本 中的实际应用帮助你彻底掌握这一路径处理利器能够在 Shell 脚本中写出更稳健、更可读的文件处理逻辑。basename 命令是什么从完整路径中提取基本名称在 Linux 日常操作中我们经常面对形如/home/jim/program.c的完整路径。很多时候脚本只需要其中最后一段——即文件本身的名称program.c而不关心它位于哪个目录。basename 命令正是为此而生它打印目录或者文件的基本名称即去除路径中的目录部分只保留最后的文件名或目录名组件。在 shell 脚本中basename 常与 dirname 命令配合使用用于命令替换command substitution来指定和输入文件名称有所差异的输出文件名称。例如把/data/logs/app.log处理成app.log后再追加新的后缀这是日志轮转、备份归档、批处理脚本中最常见的需求之一。语法与选项解析语法basename(选项)(参数)命令的基本形态非常简单传入一个带路径信息的字符串basename 就会输出其中最后一段内容。选项--help显示帮助信息 --version显示版本号信息。$ basename --help 用法basename 名称 [后缀] 或basename 选项 ... $ basename --version basename (GNU coreutils) ...部分 GNU coreutils 版本还提供-a同时处理多个参数与-s指定去除后缀等扩展选项但上述--help与--version是文档明确给出的两个最基础选项适用于几乎所有发行版。参数文件带路径信息的文件必填basename 会从中提取基本名称后缀可选参数指定要去除的文件后缀字符串。当文件基本名称以该后缀结尾时后缀会被一并去除。例如basename /home/jim/program.c .c会先提取program.c再因为给定后缀.c而输出program。实战示例两个核心用法示例一显示一个 shell 变量的基本名称要显示一个 shell 变量的基本名称请输入basename $WORKFILE此命令显示指定给 shell 变量WORKFILE的值的基本名称。如果WORKFILE变量的值是/home/jim/program.c文件则此命令显示program.c$ WORKFILE/home/jim/program.c $ basename $WORKFILE program.c无论路径多深、包含多少层目录basename 都只输出最后一段组件这在脚本中提取文件名变量时极为常用。示例二构造一个和另一个文件名称相同除了后缀的文件名称要构造一个和另一个文件名称相同除了后缀的文件名称请输入OFILEbasename $1 .c.o此命令指定给OFILE文件第一个位置上的参数$1的值但它的.c后缀更改至.o。如果$1是/home/jim/program.c文件则OFILE成为program.o。因为program.o仅是一个基本文件名称它标识在当前目录中的文件。拆解这一经典写法可以看到 bash 中的三层协作$1是脚本或函数接收的第一个参数此处为完整路径basename $1 .c用命令替换提取基本名称并去除.c后缀得到program再通过拼接.o最终得到program.o——一个与输入文件同前缀、不同后缀的新文件名。这条命令的妙处在于无论调用脚本时传入的路径是/home/jim/program.c、./src/program.c还是相对的program.c输出的OFILE都是纯净的program.o落在当前目录不会因路径层级而出现偏差。更多实战路径处理与边界场景在掌握核心用法后可以继续扩展到日常更常见的场景去除任意后缀得到基名用于日志或备份文件命名$ basename /var/log/nginx/access.log .log access配合循环批量处理文件提取文件名做进一步操作for file in /data/uploads/*.tar.gz; do name$(basename $file .tar.gz) echo 解压目录$name done注意引号与路径尾斜杠的边界行为当路径以/结尾如basename /a/b/时basename 输出的往往是最后一个非空路径组件当传入的参数不含任何/时如basename a输出就是参数本身。这些细节在不同实现上略有差异脚本中建议对路径变量做好引号保护与判空处理。basename 与 dirname路径解析的一体两面basename 提取文件名的同时其姊妹命令 dirname 负责取出目录部分。仓库中的 dirname 命令文档 明确说明dirname 命令去除文件名中的非目录部分仅显示与目录有关的内容。dirname 命令读取指定路径名保留最后一个/及其后面的字符删除其他部分并写结果到标准输出。如果最后一个/后无字符dirname 命令使用倒数第二个/并忽略其后的所有字符。$ dirname // 结果为 / $ dirname /a/b/ 结果为/a $ dirname a 结果为 . $ dirname a/b 结果为路径名 a对比可见basename /home/jim/program.c得到program.c而dirname /home/jim/program.c得到/home/jim。两者互补正好把一条完整路径拆成目录部分 文件名部分。文档同样强调dirname 和 basename 通常在 shell 内部命令替换使用以指定一个与指定输入文件名略有差异的输出文件名——这正是前面OFILE示例的底层逻辑。结合仓库源码basename 在 linux-command 项目中的实际应用command 目录与索引生成linux-command 仓库将每个命令的说明整理为独立的 Markdown 文件存放在 command 目录 下如 basename.md、dirname.md再通过 scripts/build.mjs 生成静态站点与索引数据 dist/data.json。在 构建脚本 scripts/build.mjs 的createDataJSON函数中项目正是用 Node.js 的path.basename从每个命令的 Markdown 文件路径中提取命令名进而生成每个命令对应的访问路径// 命令路径 json[p] /${path.basename(mdPath, .md).replace(/\\/g, /)};这与 shell 中basename的语义完全一致传入/xxx/command/basename.mdpath.basename(mdPath, .md)返回basename再拼上前缀/得到/basename这样的页面路由。也就是说我们在终端里用 basename 提取文件名项目构建时用同名思路提取命令名——同一个概念贯穿了脚本编程与 Node.js 工具链。最终生成的 dist/data.json 中即可看到basename: {n: basename, p: /basename, d: 打印目录或者文件的基本名称}这样的索引条目。从源码看路径处理的重要性该项目 README.md 提到仓库搜集了 600 多个 Linux 命令全部命令文档都以command/命令名.md的扁平结构存放。若没有 basename / path.basename 这类剥离路径、提取组件的能力无论是构建脚本的索引生成还是脚本中对用户输入路径的二次加工都会因为目录层级、后缀差异而变得繁琐易错。这正是 basename 命令在真实工程中被反复使用的原因。小结什么时候该用 basename场景推荐写法从完整路径中取文件名basename /home/jim/program.c→program.c从完整路径中取去后缀的基名basename /home/jim/program.c .c→program构造同前缀异后缀的输出名OFILE\basename $1 .c.o批量循环中为每个文件生成派生名name$(basename $file .tar.gz)只取目录部分配套命令dirname /home/jim/program.c→/home/jimbasename 虽小却是 Shell 脚本中最基础也最可靠的文件路径处理工具之一。掌握它与 dirname 的配合再结合本文给出的命令替换写法你就能在处理文件批量转换、日志归档、备份命名等任务时写出不依赖路径层级、稳健可移植的脚本逻辑。更多命令详解可在本仓库 command 目录 中按需查阅。赞分享文档教程【免费下载链接】linux-commandLinux命令大全搜索工具内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux项目地址https://gitcode.com/GitHub_Trending/linux/linux-command点击查看免费下载相关推荐SerenityOS basename 命令详解路径基名提取的实现原理与实战用法SerenityOS basename 命令详解路径基名提取的实现原理与实战用法 basename 是 SerenityOS 用户态提供的一个标准路径处理工具操作系统内核驱动NotepadNext命令行批处理脚本自动重命名文件NotepadNext命令行批处理脚本自动重命名文件 引言告别繁琐的手动重命名 你是否还在为以下场景头疼 摄影爱好者上千张照片需要按日期_事件_序号桌面应用代码编辑器【免费下载】 Linux命令行与Shell脚本编程大全【linux常用命令大全】Linux命令行与Shell脚本编程大全 第3版 PDF全本 21MB 百度网盘下载 简介 本仓库提供了一本关于Linux命令行与Shell脚本编程的全方位教程上一篇Puppeteer AwaitableIterable统一同步与异步可迭代集合的类型设计与查询系统源码解析下一篇WPF 内存泄漏排查:3 个陷阱加 1 份清单,内存降 60%创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表