如何在 Shell 脚本中提取文件名和扩展名

2023-10-17

要从 shell 脚本中的文件路径中提取文件名和扩展名,您可以使用`基本名称`命令。

这是一个如何使用的示例basename来提取filename and 扩大从给定的文件路径:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env bash
 
# 定义文件路径
filepath=“/var/log/mail.log”
 
# 从文件路径中提取文件名和扩展名
filename=$(basename “$文件路径”)
 
# 从文件路径中提取扩展名
扩大=“${文件名##*.}”
 
# 提取不带扩展名的文件名
filename=“${文件名%.*}”

在此示例中,`$文件路径` 是您要从中提取文件名和扩展名的文件路径。这basename命令提取filename and 扩大从文件路径并将其存储在filename多变的。

The 扩大然后将变量设置为最后一个之后的字符串。文件名变量中的字符,使用##参数扩展运算符。

The filename然后将变量设置为最后一个之前的字符串。中的字符filename变量,使用%参数扩展运算符。

这将提取filename and 扩大从文件路径并将它们分别存储在文件名和扩展名变量中。

然后,您可以根据需要在脚本中使用这些变量。例如,您可以使用filename and 扩大变量来检查文件的类型或重命名它。

1. 获取不带路径的文件名

首先,从输入文件名中删除完整文件路径。例如,如果文件名输入为“/var/log/mail.log”然后提取完整的文件名mail.log only.

1
2
3
4
5
6
#!/usr/bin/env bash
 
filepath=“/var/log/mail.log”
 
filename=$(basename “$文件路径”)
echo “完整文件名:$文件名”

输出将是:


Full filename: mail.log
  

2. 不带扩展名的文件名

现在,从提取的不带路径的完整文件名中提取不带扩展名的文件名,如上所述。

1
2
3
4
5
6
#!/usr/bin/env bash
 
filepath=“/var/log/mail.log”
filename=$(basename “$文件路径”)
filename=“${文件名%.*}”
echo “文件名是:$文件名”

输出将是:


Filename is: mail
  

3. 仅获取扩展

现在,从提取的不带路径的完整文件名中提取不带名称的文件扩展名。

1
2
3
4
5
6
7
#!/usr/bin/env bash
 
filepath=“/var/log/mail.log”
 
filename=$(basename “$文件路径”)
扩大=“${文件名##*.}”
echo “扩展名:$扩展名”

输出将是:


Extension: log
  

4. 提取目录路径

您还可以使用`目录名`命令从完整文件路径中提取目录路径。例如:

1
2
3
4
5
6
#!/usr/bin/env bash
 
filepath=“/var/log/mail.log”
 
dir=$(dirname “$文件路径”)
echo “目录:$dir”

输出将是:


Directory: /var/log/
  

结论

此快速操作指南可帮助您了解如何从文件路径中提取文件名和扩展名。请记住,这些命令仅适用于 bash shell。如果您使用不同的 shell,则可能需要使用不同的语法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Shell 脚本中提取文件名和扩展名 的相关文章

  • 如何替换每行中出现的所有字符串?

    我想在以下脚本中将所有出现的 用户名 替换为 但它仅替换第一次出现的情况 ls al sed s username 这就是 sed 默认情况下的工作方式吗 提前致谢 你需要g 全局 修饰符 sed s username g
  • 寻找下一个开放端口

    有没有什么办法 使用基本的 Unix 命令 找到下一个未使用的端口号 从端口 4444 开始向上 我通过 ssh 通过 openssh 进入 Windows XP 计算机 运行 Cygwin 工具并使用 bash shell 谢谢 戴夫 尝
  • Bash:查找并连接文件

    我有以下结构 home DIR1 file ab csv DIR2 file cd csv DIR3 file3 ef csv Where file csv包含多行浮点数 每个 DIR 都有不同的浮点数 我想抓取所有的内容file csv文
  • 参考当前命令的先前参数

    例如 我想执行以下操作 mv xxxx xxxx bak 我知道我可以使用这个命令 mv xxxx bak 我认为这在某种程度上并不直接 如果我能做到这一点那就太好了 mv xxxx 1 bak 有时我需要这样 echo xxxx yyyy
  • 如何在Windows Git shell中运行./script.sh?

    也许这很尴尬 但是当我在 Git shell 中工作时 我无法在 Windows 上运行 sh 文件 也许我必须安装一些东西 但我认为 Git 会支持 bash 命令 我知道 Windows 不使用 sh 文件 我正在执行安装步骤游戏结束
  • Bash 中 $() 和 () 之间的区别

    当我打字时ls l echo file 支架的输出 这只是简单的回显 被获取并传递到外部ls l命令 就等于简单的ls l file 当我打字时ls l echo file 我们有错误 因为不能嵌套 内部外部命令 有人可以帮助我理解之间的区
  • 将所有脚本参数复制到另一个变量

    我需要复制所有脚本参数并将它们传递给另一个脚本 我尝试这样做 args printargs sh args echo printargs sh args 但在这种情况下 如果我使用包含空格的参数调用我的父脚本 例如 script sh ar
  • 在 Ubuntu 上纯粹通过 bash 脚本安装 mysql 5.7

    我想要一个无需任何手动输入即可安装 MySQL 5 7 实例的 bash 脚本 我正在关注数字海洋教程 https www digitalocean com community tutorials how to install mysql
  • 将 stdout 作为命令行 util 的文件名传递?

    我正在使用一个命令行实用程序 该实用程序需要传递文件名以将输出写入 例如 foo o output txt 它唯一写入的东西stdout是一条消息 表明它运行成功 我希望能够通过管道传输写入的所有内容output txt到另一个命令行实用程
  • bash 函数保留制表符补全

    我把函数 make color make 1 ccze A in bashrc获得彩色的 make 输出 他的作品很好 但是make用于选择目标的制表符补全功能丢失 有什么方法可以保留函数中命令的制表符完成 或者我可以做其他事情来实现制表符
  • Bash:循环遍历字符串数组后无法读出带空格的字符串

    我正在使用循环读取数组的内容 该数组包含名为 music 的目录层次结构中的所有目录和文件 内容是 find 命令先前输出的字符串 这个想法是根据流派 艺术家和标题将 directory contents 中每个数组元素的完整目录路径分成子
  • 如何从 powershell 中设置 bash 的环境变量?

    使用powershell我该如何设置 https askubuntu com q 1205227 45156 the 环境 https stackoverflow com q 5327495 262852变量 这里 特别 https sta
  • BASH 脚本编译多个 C++ 文件 - OpenCV

    请参见在C 和OpenCV中调用其他文件中的函数 https stackoverflow com questions 24442836 call functions in other files in c and opencv 对于最初的问
  • Bash 脚本:#!/bin/bash 是什么意思? [复制]

    这个问题在这里已经有答案了 在 bash 脚本中 什么是 bin bash第一行是什么意思 UPDATE 有区别吗 bin bash and bin sh 这就是所谓的shebang http en wikipedia org wiki S
  • 如何显示 NUL 分隔数据的中间管道结果?

    如何组合以下两个命令 find print0 grep z pattern tr 0 n find print0 grep z pattern xargs 0 my command 进入单个管道 如果我不需要 NUL 分隔符那么我可以这样做
  • 将 JSON 数组转换为 bash 数组并保留空格

    我想将 JSON 文件转换为 bash 字符串数组 稍后我可以对其进行迭代 我的JSON结构如下 USERID TMCCP CREATED DATE 31 01 2020 17 52 USERID TMCCP CREATED DATE 31
  • 在 shell 脚本中连接命令字符串

    我正在维护一个现有的 shell 脚本 它将命令分配给 shell 脚本中的变量 例如 MY COMMAND bin command dosomething 然后接下来 它通过执行以下操作将 参数 传递给 MY COMMAND MY ARG
  • 设置 Pyenv 的路径

    我正在尝试在我的服务器中设置 Pyenv 的加载路径 bashrc file 我正在关注这个tutorial https realpython com intro to pyenv 它要求我们在哪里设置pyenv到加载路径 然而 在我的 b
  • POSIX SH 构建循环变量,其元素包含空格

    这是我需要的代码 bin sh x1 a1 a2 x2 b1 b2 list SOMETHING for x in list do echo x done 以及我想要的输出 a1 a2 b1 b2 问题是 应该做什么SOMETHING是 我
  • 规范化 solaris 上的路径名

    在 GNU 系统上我只会使用readlink f SOME PATH 但 Solaris 没有 readlink 我更喜欢在 bash 中运行良好的程序 但如果需要的话其他程序也可以 Edit 到目前为止 我想到的最好的方法是使用 cd 和

随机推荐

  • 如何检查 Bash 中文件或目录是否存在

    很多时候 在编写 Shell 脚本时 您可能会发现自己处于需要根据文件是否存在来执行操作的情况 在Bash中 可以使用test命令来检查文件是否存在并判断文件的类型 测试命令采用以下语法形式之一 test EXPRESSION EXPRES
  • 如何在 Python 中分割字符串

    使用字符串时 日常操作之一是使用给定的分隔符将字符串拆分为子字符串数组 在这篇文章中 我们将讨论如何在Python中分割字符串 split 方法 在Python中 字符串被表示为不可变的str对象 这str类附带了许多字符串方法 允许您操作
  • 如何在 Ubuntu 18.04 上安装和配置 Samba

    Samba 是一个免费且开源的重新实现SMB CIFS网络文件共享协议那 允许最终用户访问文件 打印机和其他共享资源 本教程介绍如何在 Ubuntu 18 04 上安装 Samba 并将其配置为独立服务器 以通过网络在不同操作系统之间提供文
  • 如何在 CentOS 7 上安装和使用 Docker Compose

    Docker 组合是一个允许您定义和运行多容器 Docker 应用程序的工具 使用 Compose 您可以在单个 YAML 文件中定义应用程序的服务 网络和卷 然后使用单个命令启动您的应用程序 Compose 可用于不同的目的 例如单主机应
  • 在 Debian 9 上使用 Let's Encrypt 保护 Nginx

    Let s Encrypt 是由互联网安全研究小组 ISRG 开发的免费开放的证书颁发机构 如今 Let s Encrypt 颁发的证书几乎受到所有浏览器的信任 在本教程中 我们将解释如何使用 Certbot 工具为 Debian 9 上的
  • 如何在 Ubuntu 18.04 上安装和配置 GitLab

    GitLab 是一个基于网络的开源Git存储库管理器编写为Ruby包括 wiki 问题管理 代码审查 监控以及持续集成和部署 它使开发人员能够创建 审查和部署他们的项目 GitLab 提供三种不同版本 社区版 CE 企业版 EE 和 Git
  • 如何在 Ubuntu 18.04 上安装 Steam

    Steam是由 Valve 公司开发的用于购买和玩视频游戏的跨平台娱乐平台 它使您可以访问数千种游戏并结识新朋友 在本教程中 我们将向您展示如何在 Ubuntu 18 04 上安装 Steam 相同的说明适用于 Ubuntu 16 04 和
  • Python 中的列表与元组:综合指南

    Python 提供了多种内置数据类型 其中两个是列表和元组 了解这些数据结构的细微差别对于编写高效且有效的 Python 代码至关重要 在本教程结束时 您将能够就何时使用列表以及何时选择元组做出明智的决定 从而提高您在 Python 中处理
  • 使用 to_pickle() 函数将 Pandas DataFrame 导出到 Pickle 文件

    The to pickle函数于Pandas允许您将 DataFrame 或 Series 对象序列化 pickle 为 pickle 文件格式 当您想要保存 DataFrame 或 Series 的当前状态并稍后检索它而不丢失任何数据或元
  • 掌握 Samba:创建强大的 Linux 文件服务器

    Linux 文件服务器是功能强大的服务器之一 可帮助您与基于 Windows 的 PC 和其他操作系统共享文件和打印机 在我们讨论使用 Samba 作为文件服务器之前 我们先讨论一些基础知识 目录 hide 1 Linux Samba Wi
  • Linux Sed 分支:条件文本处理

    分支于sed允许您在 sed 脚本中创建条件工作流程 根据输入或特定条件 sed 可以选择执行一组命令而不是另一组命令 它类似于编程中的 if then else 结构 让我们深入研究一些示例来了解 sed 中的分支机制 目录 hide 1
  • 使用 read_pickle 读取 Pandas 中的 Pickle 文件

    read pickle in Pandas允许您加载腌制的 Pandas 对象 它可以加载数据 例如数据框和使用保存的系列熊猫 to pickle method 在本教程中 我们将揭示其语法 将 pickle 文件加载到 DataFrame
  • 在 Linux 上恢复已删除的文件(初学者教程)

    您是否曾经错误地删除过重要文件 谁不呢 好的 但是我可以恢复它们吗 在这篇文章中 您将了解如何使用不同文件系统上的各种程序在 Linux 上恢复已删除的文件 您将了解如何从 SD 卡 HDD 和不同分区上的已删除分区恢复已删除的文件Linu
  • 掌握 seq 命令:Linux 中的序列生成

    The seqLinux 中的命令用于生成数字序列 如果您想生成一个简单的增量列表或具有特定格式的复杂序列 seq可以做到这一点 让我们深入了解它的强大功能 目录 hide 1 生成从 1 到指定数字的序列 2 生成两个数字之间的序列 3
  • 在 Linux 中设置永久和系统范围的环境变量

    在 Linux 中 环境变量是一个可用于提供系统不同部分的配置和数据的值 这些变量充当数据的占位符 使应用程序和 shell 能够更顺畅地相互交互 环境变量的一个主要优点是它们促进进程之间的值共享 从而实现对系统行为各方面的集中控制 目录
  • 使用 to_html 将 Python Pandas DataFrame 转换为 HTML 表

    This to html函数于Pandas允许您转换您的数据框到 HTML 表中 它具有高度可定制性和灵活性 使您能够根据您的要求定制 HTML 输出结果 这可能包括设计数据的样式和格式以适合您所需的演示文稿 目录 hide 1 语法和参数
  • 使用 Pandas DataFrame loc 属性进行基于标签的访问

    The loc财产在Pandas允许基于标签的索引 这意味着您使用标签 如列名和行索引 来访问特定的行和列数据框 Unlike iloc 它使用基于整数的索引 loc主要是基于标签的 使其能够处理具有有意义标签的数据 目录 hide 1 P
  • 使用Python random模块生成随机数

    随机数生成是编程中的一个基本概念 对于统计采样 模拟 数据生成 随机算法甚至游戏等各种任务至关重要 在本教程中 我们将介绍基本概念 如何生成不同类型的随机数 如整数 浮点数和特定范围内的随机数 以及随机数提供的各种函数 random mod
  • Linux Syslog 服务器和日志管理

    在这篇文章中 我们将讨论 Linux Syslog 服务器以及如何管理日志 如果您想保护您的系统 您必须知道该系统中发生了什么 您可以使用日志来做到这一点 通过日志 您可以诊断问题并确定系统和应用程序的运行状况 在上一篇文章中 我们讨论了如
  • 如何在 Shell 脚本中提取文件名和扩展名

    要从 shell 脚本中的文件路径中提取文件名和扩展名 您可以使用 基本名称 命令 这是一个如何使用的示例basename来提取filename and 扩大从给定的文件路径 usr bin env bash Define a file p