在Linux Shell脚本中,basename和 dirname是两个非常实用的命令,常用于处理文件路径和名称。本文将详细介绍这两个命令的用法,并提供丰富的示例代码,以帮助您更好地理解和应用它们。

一、basename命令

1.1 基本用法

basename命令用于去除路径信息,只保留文件名或目录名。其基本语法如下:

basename [OPTION] NAME [SUFFIX]
  • NAME:要处理的路径名。
  • SUFFIX:可选,用于去除文件名中的后缀。

1.2 示例

1.2.1 去除路径信息
#!/bin/bashfile_path="/usr/local/bin/script.sh"
file_name=$(basename "$file_path")
echo "File name: $file_name"
​

输出:

File name: script.sh
1.2.2 去除后缀
#!/bin/bashfile_path="/usr/local/bin/script.sh"
file_name=$(basename "$file_path" .sh)
echo "File name without suffix: $file_name"
​

输出:

File name without suffix: script
1.2.3 批量处理文件名
#!/bin/bashfor file in /usr/local/bin/*.sh; dobase_name=$(basename "$file" .sh)echo "Base name: $base_name"
done
​

二、dirname命令

2.1 基本用法

dirname命令用于去除文件名,只保留路径信息。其基本语法如下:

dirname NAME
  • NAME:要处理的路径名。

2.2 示例

2.2.1 获取路径信息
#!/bin/bashfile_path="/usr/local/bin/script.sh"
dir_path=$(dirname "$file_path")
echo "Directory path: $dir_path"
​

输出:

Directory path: /usr/local/bin
​
2.2.2 结合basename使用
#!/bin/bashfile_path="/usr/local/bin/script.sh"
dir_path=$(dirname "$file_path")
base_name=$(basename "$file_path")
echo "Directory path: $dir_path"
echo "File name: $base_name"
​

输出:

Directory path: /usr/local/bin
File name: script.sh
​
2.2.3 批量处理文件路径
#!/bin/bashfor file in /usr/local/bin/*.sh; dodir_path=$(dirname "$file")echo "Directory path: $dir_path"
done
​

三、实践应用

3.1 文件备份脚本

一个简单的文件备份脚本,使用 basename和 dirname处理文件名和路径。

#!/bin/bashsrc_file="/usr/local/bin/script.sh"
backup_dir="/backup"# 获取文件名和目录路径
file_name=$(basename "$src_file")
dir_path=$(dirname "$src_file")# 创建备份目录结构
mkdir -p "$backup_dir/$dir_path"# 复制文件到备份目录
cp "$src_file" "$backup_dir/$dir_path/$file_name"echo "File $src_file has been backed up to $backup_dir/$dir_path/$file_name"
​

3.2 日志文件分离

一个将日志文件按日期分离的脚本,使用 basename和 dirname处理文件路径和名称。

#!/bin/bashlog_file="/var/log/app.log"
archive_dir="/var/log/archive"# 获取当前日期
current_date=$(date +%Y-%m-%d)# 获取文件名和目录路径
file_name=$(basename "$log_file")
dir_path=$(dirname "$log_file")# 创建归档目录
mkdir -p "$archive_dir/$current_date"# 复制并重命名日志文件
cp "$log_file" "$archive_dir/$current_date/${file_name}_$current_date"echo "Log file $log_file has been archived to $archive_dir/$current_date/${file_name}_$current_date"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/911683.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/911683.shtml
英文地址,请注明出处:http://en.pswp.cn/news/911683.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D世界里的“盗梦空间”!在方块里再造一个世界?高级特效get✅

有没有想过,游戏里的镜子、传送门、或者屏幕上播放的实时3D动画是怎么实现的? 答案就是一项黑科技——渲染目标(Render Targets)。它允许我们不直接渲染到屏幕,而是“偷偷地”渲染到一张幕后的贴图上,然后…

浅析一种基于深度学习算法的维吾尔文OCR技术的实现原理及其应用场景

维吾尔文OCR技术是一种基于人工智能和深度学习技术的维吾尔文光学字符识别工具,能够快速、准确地将印刷体或手写体维吾尔文转换为可编辑、可搜索的数字化文本。该技术适用于政府、教育、出版、金融等多个行业,助力维吾尔文信息的高效处理与智能化管理。 …

如何使用MQTTX软件来进行MQTT协议的测试

下载MQTTX软件 下载地址及说明文档开始使用 - MQTTX 文档,比较详细 为什么使用MQTTX 何时要使用MQTTX软件呢?用来检测物联网模块上云的数据就很方便,当然云上如果有日志系统的话也是可以用的。 物联网模块,以利尔达模块为例 NT26-KCN系列…

ELK 和 OpenShift 中的 EFK

ELK 和 OpenShift 中的 EFK 确实是同类日志解决方案的不同实现,核心功能相似但组件略有差异。以下是详细对比和解释: 1. ELK vs EFK:核心区别 组件ELK 栈EFK 栈(OpenShift 默认)日志收集Logstash(Java 实现…

Python UDP Socket 实时在线刷卡扫码POS消费机门禁控制服务端示例源码

本示例使用的设备:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1bk8Qc9r&ftt&id17021194999 一、服务端绑定IP开启UDP端口接收消费机提交的请求 import sys import os import socket import time import datetimeIpList[] if sys.pl…

对于高考边界的理解以及未来就业层级的学习与思考

目录 一、2024年高考全国多少考生,文化课,文科理科,分别总分多少分?清北得多少分能上?二、1342万人里面,有多少人能上清北,多少能上985,多少能上211,多少能上二本&#x…

JVM调优实战 Day 4:JVM类加载机制

【JVM调优实战 Day 4】JVM类加载机制 文章内容 在Java虚拟机(JVM)的运行过程中,类加载机制是整个程序启动和运行的基础。它决定了Java类是如何被动态加载到JVM中,并为后续的字节码执行做好准备。理解JVM类加载机制不仅有助于我们…

R 语言中的判断语句

R 语言中的判断语句 在R语言编程中,判断语句是执行条件逻辑的基础。它们允许程序根据特定的条件执行不同的代码块。本文将深入探讨R语言中的几种常见判断语句,包括if语句、if-else语句和switch语句,并探讨它们的用法和场景。 1. if语句 if…

从设备自动化到智能管控:MES如何赋能牛奶饮料行业高效生产?

万界星空科技全新推出的:新一代智能化MES系统,深度融合AI大数据技术,实现生产全流程可视化、智能排产、实时质量追溯与设备互联,助力企业降本增效30%。 现开放免费试用名额,体验智能化生产管理的高效与便捷&#xff01…

TDengine 技术参数配置大全

1. 背景 TDengine 的 taos.cfg 中配置项及使用 SQL 命令 alter 修改的系统变量之间的关系如何,哪些是持久存储项,哪些设置是临时项,这章将详细说明。 本文是技术参考资料,请收藏。 2.定义 1. 全局配置参数 全局配置参数&#…

无人机神经网络模块运行与技术难点

一、神经网络模块的运行方式 1. 分层处理架构 感知层 多模态数据融合:通过八元数卷积网络(OCNN)统一处理LiDAR、摄像头、IMU等异构传感器数据,将点云坐标(x/y/z)、图像RGB与光流信息编码至8维虚部&#…

前端react框架实现打包时间动态加入配置展示在指定页面

注意: 当前方法特定为 create-react-app 构建框架,其他的构建流程不同,不能直接照搬 react-scripts 的方式。 ✅ 目标: 在 React 打包(build)时,自动将当前时间写入代码中某个变量或 console…

原子操作(CAS)

原子操作 原子操作原理什么是原子操作?原子性原子变量相关接口内存序 shared_ptr的实现 原子操作原理 什么是原子操作? 原子操作其实就是指在多线程的环境下,确保对共享变量的操作不会被干扰,从而避免了竞态条件。 我们都知道&…

马克思主义基本原理期末复习下

二十、资本的原始积累 所谓资本原始积累,就是以暴力手段使生产者与生产资料分离资本快速集中于少数人手中,资本主义得以快速发展的历史过程。具体过程其一,用暴力手段夺取农民的土地,如英国圈地运动在国外建立殖民地,…

体育数据api接口,足球api篮球api电竞api,比赛赛事数据api

在体育行业,数据驱动一切,从内容分发到竞猜预测,从用户互动到商业变现,背后少不了一个关键词:数据接口(API)。无论是实时比分、比赛事件、历史统计,还是球员详情、战绩排名&#xff…

Harmony 状态监听 @Monitor和@Computed

Monitor与Computed装饰器在ArkUI状态管理中的协同应用 一、装饰器概述 1. Monitor装饰器 Monitor是ArkUI状态管理V2中的核心装饰器,用于深度监听状态变量的修改: 支持监听嵌套类属性、多维数组项和对象数组中的指定项变化能够获取变化前后的值进行比…

同济大学多模态感知具身导航全面综述

作者: I-Tak Ieong, Hao Tang 单位:同济大学计算机学院,北京大学计算机学院 论文标题: Multimodal Perception for Goal-oriented Navigation: A Survey 论文链接:https://arxiv.org/pdf/2504.15643 主要贡献 基于…

2025年CCF先进音频技术竞赛

由中国计算机学会主办、CCF语音对话与听觉专委会承办、语音之家协办、华为终端有限公司赞助的CCF先进音频技术大赛正式启动。大赛旨在推动国内高等院校及科研院所在音频技术领域的专业人才培养,支持学生科技创新,选拔优秀人才。 赛事官网:ht…

手撕线程池

线程池的目的: 1.复用线程,减少频繁创建和销毁的开销 创建和销毁线程是昂贵的系统操作,涉及内核调度、内存分配; 使用线程池预先创建一批线程,在多个任务间循环复用,避免资源浪费,提高性能。 …

3DTiles三维模型

1. 3DTiles 介绍​ 2016 年,Cesium 团队借鉴传统 2DGIS 的地图规范:WMTS,借鉴图形学中的层次细节模型,打造出大规模的三维数据标准:3d-Tiles,中文译名:三维瓦片。 它在模型上利用了 gltf 渲染…