Linux shell 提取文件名和目录名的方法

yizhihongxing

Linux shell 中提取文件名和目录名的方法通常使用shell变量和一些特定命令。以下是提取文件名和目录名的几种方法:

  1. 使用$变量获取当前目录和文件名

在Linux shell中,我们可以使用一些特殊的变量获取当前目录和文件名。其中,$PWD变量表示当前目录的路径,$0变量表示当前脚本的文件名,$1变量表示脚本后的第一个参数(文件名)。

例如,我们可以在Linux shell命令行中使用以下命令获取当前目录和脚本文件名:

echo $PWD
echo $0

输出结果类似于:

/home/user
test.sh
  1. 使用basename和dirname命令

另一种提取文件名和目录名的方法是使用basename和dirname命令。basename命令可以从给定的路径中获取文件名,dirname命令可以从给定的路径中获取目录名。

例如,假设我们有一个文件路径/path/to/file.txt ,我们可以使用以下命令提取其文件名和目录名:

# 获取文件名
basename /path/to/file.txt
# 输出结果:file.txt

# 获取目录名
dirname /path/to/file.txt
# 输出结果:/path/to

示例1:提取文件名

假设我们有一个文本文件 "test.txt",它的绝对路径为 "/home/user/documents/test.txt"。我们可以使用以下命令提取文件名:

# 使用basename命令提取文件名
basename /home/user/documents/test.txt
# 输出结果: test.txt

# 使用$变量来提取文件名
filename=/home/user/documents/test.txt
echo ${filename##*/}
# 输出结果: test.txt

在第二个示例中,##*/是一种使用shell变量来提取文件名的更简单的方法。这个语法可以帮助我们剥离字符串中的目录路径,并保留文件名。

示例2:提取目录名

假设我们有一个文本文件 "test.txt",它的绝对路径为 "/home/user/documents/test.txt"。我们可以使用以下命令来提取目录名:

# 使用dirname命令提取目录名
dirname /home/user/documents/test.txt
# 输出结果: /home/user/documents

# 使用$变量来提取目录名
filename=/home/user/documents/test.txt
echo $(dirname $filename)
# 输出结果: /home/user/documents

在第二个示例中,我们使用了$(…)来调用dirname命令。这种用法也是可以的,这意味着我们需要使用在命令替换中常用的括号方式来执行命令。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux shell 提取文件名和目录名的方法 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • Java数据结构之链表(动力节点之Java学院整理)

    Java数据结构之链表(动力节点之Java学院整理) 什么是链表 链表是一种数据结构,它是由一系列节点组成的,每个节点包含数据和一个指向下一个节点的指针。与数组不同,链表中的节点在内存中不是连续存储的,而是通过指针来连接。链表的基本形式包括单向链表、双向链表和循环链表。 链表的优缺点 优点 可以充分利用计算机的空间,实现灵活的内存动态管理。 插入和删除操作时…

    other 2023年6月27日
    00
  • ASP.NET Core MVC 过滤器(Filter)

    ASP.NET Core MVC 过滤器(Filter)攻略 过滤器(Filter)是ASP.NET Core MVC中的一个重要概念,它允许我们在请求处理过程中插入自定义逻辑。过滤器可以用于处理请求前后的操作,例如身份验证、日志记录、异常处理等。本攻略将详细介绍ASP.NET Core MVC过滤器的使用方法,并提供两个示例说明。 过滤器的类型 ASP.N…

    other 2023年8月20日
    00
  • linux磁盘之lsblk命令

    当然,我很乐意为您提供有关“linux磁盘之lsblk命令”的完整攻略。以下是详细的步骤和两个示例: 1. 什么是lsblk命令? lsblk命令是一个用于列出系统中所有块设备的命令。块设备是指可以被分区并用于存储数据的设备,例如硬盘、SSD、USB驱动器等。lsblk命令可以显示每个块设备的名称、大小、挂载点等信息。 以下是lsblk命令的基本语法: ls…

    other 2023年5月6日
    00
  • python如何对链表操作

    针对”python如何对链表操作”,我会详细讲解 Python 如何实现链表数据结构的操作,包括链表的构建、查找、插入、删除等操作。以下是完整攻略: 链表的概念 链表是一种常见的数据结构,它由若干结点组成,每个结点包含了数据和一个指向下一个结点的指针。链表中的结点是按照线性顺序排列的,并且在内存中不一定连续。 Python 中链表的实现 Python 中对链…

    other 2023年6月27日
    00
  • 靠谱助手解决常见安卓模拟器的四大无法安装问题

    下面是“靠谱助手解决常见安卓模拟器的四大无法安装问题”的完整攻略: 一、问题描述 在使用安卓模拟器过程中,有时会遇到无法安装软件的问题。主要表现为点击安装软件后,无反应或弹出提示框但无法正常安装软件。这个问题会给用户带来很大的不便,特别是对于安卓开发人员来说更是一个重要问题。 二、常见原因 下面列举常见的四个原因:1. 当前模拟器内存不足,或存储空间不足;2…

    other 2023年6月26日
    00
  • 详解Java抽象类与普通类的区别

    下面我将详细讲解“详解Java抽象类与普通类的区别”,并提供两条示例说明。 什么是抽象类? 首先,我们来了解一下什么是抽象类。抽象类是一种特殊的类,它不能被实例化,只能作为其他类的父类被继承,子类必须实现其抽象方法才能被实例化。抽象类的关键字是“abstract”。 抽象类和普通类的区别 接下来,我们来看一下抽象类和普通类的区别,主要有以下几点: 实例化:抽…

    other 2023年6月27日
    00
  • 前端给后端传list

    以下是前端给后端传list的完整攻略: 前端给后端传list 在前端向后端传递list时,我们可以使用以下两种方法: 1. 使用JSON格式传递 使用JSON格式传递list是一种常见的方法。以下是一些示例代码,演示如何使用JSON格式传递list: // 前端代码 const list = [1, 2, 3, 4, 5]; fetch(‘/api/data…

    other 2023年5月7日
    00
  • 魔兽世界8.0敏锐贼堆什么属性好 敏锐贼属性收益及选择优先级

    魔兽世界8.0敏锐贼属性选择攻略 1. 敏锐贼属性选择的重要性 敏锐贼(Rogue)作为一个近战物理输出职业,属性的选择对于其输出和生存能力有着重要影响。敏锐贼的主要属性选择包括敏捷(Agility)、暴击(Critical Strike)、急速(Haste)、精通(Mastery)和全能(Versatility)。正确的属性选择能够提升敏锐贼的伤害输出和生…

    other 2023年6月28日
    00
合作推广
合作推广
分享本页
返回顶部