如何在 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 脚本中提取文件名和扩展名 的相关文章

  • 为什么减法返回 - 符号

    我对简单的减法有疑问 但我不明白出了什么问题 我的代码 start date s N cut b1 13 Treatment end date s N cut b1 13 delta expr end start echo delta de
  • 如何剪切(1) 个驼峰字?

    Bash 中有没有一种简单的方法可以将驼峰式单词拆分为其组成词 例如 我想将 aCertainCamelCasedWord 拆分为 a certain Camel Cased Word 并能够选择我感兴趣的那些字段 当单词分隔符是下划线时
  • 我的 unix 脚本出了什么问题

    bin bash while echo n Player s name read name name ZZZ do searchresult grep name playername if searchresult 0 then echo
  • 将“npm run start”的输出写入文件

    我想捕获的输出npm run start在一个文件中 我遇到了大量错误 我想更好地控制如何筛选输出 当我尝试时 npm run start gt log txt 我得到一个非常简短的文件 8 行 其结尾为 34m 39m 90m wdm 3
  • 从 TypeScript 运行任何 Linux 终端命令?

    有没有办法直接从 TypeScript 类中执行 Linux 终端命令 这个想法是做类似的事情 let myTerminal new LinuxTerminal let terminalResult myTerminal run sudo
  • 如何显示 zsh 函数定义(如 bash“type myfunc”)?

    如何在 zsh 中显示函数的定义 type foo没有给出定义 在bash中 bash function foo echo hello bash foo hello bash type foo foo is a function foo e
  • 如何使用 bash 显示具有两个子文件夹的文件夹?

    我通过 Cygwin 使用 bash 我有一个大文件夹 a 有很多子文件夹 b 这些子文件夹各有一个或两个子文件夹 c 我想找到所有有两个子文件夹 c 的子文件夹 b 并输出它们 结构如下 a b1 c1 b2 c1 c2 b3 c1 c2
  • 使用 Ansible 将二进制文件添加到 PATH

    我正在尝试安装Kiex https github com taylor kiex版本管理器Elixir http elixir lang org install html使用 Ansible 的编程语言 这些是我为此使用的戏剧 name K
  • powershell stdin 管道和重定向

    你好 我一直在制作一个小的跨平台脚 本 我可以将其卷曲并通过管道传输到bash和Powershell中 基本思想是服务器向解释器发送一个命令 然后它给出一个命令将所有输出重定向到标准输出 bash 中的一个例子是 some commands
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • bash 行长度限制从何而来?

    在运行 Bash 4 4 19 标准安装 的 Solaris 11 上 输入行似乎有 256 个字符的限制 我想了解这个限制从何而来 我浏览了手册页 但没有找到任何解决此问题的内容 仅当未使用 readline 库时才会发生这种情况 在下面
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 有没有办法让我简化这些回声? [复制]

    这个问题在这里已经有答案了 我仍在学习如何编写 shell 脚本 并且我面临着一个挑战 让我更容易回显 Name1 Name2 Name15 我不太确定从哪里开始 我已经想法 但如果我搞砸了 我不想看起来很傻 有什么帮助吗 我实际上还没有尝
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • 对目录中的所有文件执行命令

    有人可以提供执行以下操作的代码 假设有一个文件目录 所有这些文件都需要通过程序运行 该程序将结果输出到标准输出 我需要一个脚本 该脚本将进入一个目录 对每个文件执行命令 并将输出连接到一个大输出文件中 例如 要在 1 个文件上运行命令 cm
  • 如何在 Windows 下向 .sh 脚本传递参数?

    我正在尝试在 Windows 下执行 sh 脚本 我安装了 Git 它允许我执行 sh 文件 但是 如果不使用 sh 作为执行前缀 我似乎无法传递任何参数 我的 sh 文件 echo Test 1 如果我用以下命令执行它 gt sh tes
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标

随机推荐

  • 如何检查 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