shell英文替换中文-文件名、目录、子目录名

中文由于编码格式的原因,有时候在数据读取或者处理时候带来一些不必要的麻烦,可以用英文替换一路径名称,或者文件名称,方便使用,减少报错,节省点人力成本去搞编码格式。

另外,shell中是可以写一堆规则去一个个sed, 但是比较麻烦,不如把一揽子的规则抽象出来,统一替换,这个还能遍历文件,目录,子目录,替换文件夹的名字以及子目录名字。

复制这个模板,改成实际的路径,定义好映射的规则,一键使用,全部替换

#!/bin/bash

# 根目录
ROOT_DIR="/d/urfolder/test"

# 定义中文到英文的映射规则
declare -A REPLACE_RULES=(
    ["中文名"]="cname"
    ["英文名"]="ename"
    ["年龄"]="age"
)

# 替换文件名或目录名中的中文为指定英文
replace_chinese_with_english() {
    local name="$1"
    for zh in "${!REPLACE_RULES[@]}"; do
        local en="${REPLACE_RULES[$zh]}"
        name=$(echo "$name" | sed "s/$zh/$en/g")
    done
    echo "$name"
}

# 遍历目录并处理文件和子目录
rename_files_and_dirs() {
    local current_dir="$1"

    # 先处理文件
	echo "Working on file rename loop"
    find "$current_dir" -maxdepth 1 -type f | while read file; do
        filename=$(basename "$file")  #/d/urfolder/test/test.csv  test.csv
        new_filename=$(replace_chinese_with_english "$filename")
        if [[ "$filename" != "$new_filename" ]]; then
            mv "$file" "$current_dir/$new_filename"
            echo "重命名文件: $file -> $current_dir/$new_filename"
        fi
    done

    # 再处理子目录
	echo "Working on directory rename loop"
    find "$current_dir" -maxdepth 1 -type d | while read dir; do
        dirname=$(basename "$dir")  #basename /d/urfolder/test/007 007
        new_dirname=$(replace_chinese_with_english "$dirname")
        if [[ "$dirname" != "$new_dirname" ]]; then
            mv "$dir" "$current_dir/$new_dirname"
            echo "重命名目录: $dir -> $current_dir/$new_dirname"
        fi
    done

    # 遍历子目录,递归处理
	echo "Working on sub-directory rename loop"
    find "$current_dir" -mindepth 1 -maxdepth 1 -type d | while read subdir; do
        rename_files_and_dirs "$subdir"
    done
}

# 开始处理
rename_files_and_dirs "$ROOT_DIR"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/943537.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【2024年最新】BilibiliB站视频动态评论爬虫

废话不多说,直接先放git仓库:GitHub - linyuye/Bilibili_crawler: bilibili爬虫,基于selenium获取oid与cookie,request获取api内容 〇:概念简述 oid:视频/动态的uuid,b站对于发布内容的通用唯…

BAPI_BATCH_CHANGE在更新后不自动更新批次特征

1、问题介绍 在CL03中看到分类特性配置了制造日期字段,并绑定了生产日期字段MCH1~HSDAT MSC2N修改批次的生产日期字段时,自动修改了对应的批次特性 但是通过BAPI:BAPI_BATCH_CHANGE修改生产日期时,并没有更新到批次特性中 2、BAPI…

SQL中的窗口函数

1.窗口函数简介 窗口函数是SQL中的一项高级特性,用于在不改变查询结果集行数的情况下,对每一行执行聚合计算或者其他复杂的计算,也就是说窗口函数可以跨行计算,可以扫描所有的行,并把结果填到每一行中。这些函数通常与…

转运机器人推动制造业智能化转型升级

​在当今制造业智能化转型的浪潮中,技术创新成为企业脱颖而出的关键。富唯转运机器人凭借一系列先进技术,成为智能转型的卓越之选。 一体化 AMR 控制系统是富唯的一大亮点。它采用低代码流程搭建和配置模式,极大地缩短了部署时间。企业无需耗…

同步异步日志系统:设计模式

设计模式是前辈们对代码开发经验的总结,是解决特定问题的⼀系列套路。它不是语法规定,⽽是⼀ 套⽤来提⾼代码可复⽤性、可维护性、可读性、稳健性以及安全性的解决⽅案。 为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开…

数据分析思维(五):分析方法——假设检验分析方法

数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》,本文内容就是提取…

AppInventor2 ClientSocketAI2Ext 拓展加强版 - 为App提供TCP客户端接入,可发送二进制数据

本文介绍App Inventor 2利用拓展实现TCP/IP协议接入功能,作为网络客户端连接TCP服务器,进行数据通信(发送/接收)。 // ClientSocketAI2Ext 拓展现状 // 原版拓展名称为:com.gmail.at.moicjarod.aix,是能用…

Docker-构建自己的Web-Linux系统-镜像webtop:ubuntu-kde

介绍 安装自己的linux-server,可以作为学习使用,web方式访问,基于ubuntu构建开源项目 https://github.com/linuxserver/docker-webtop安装 docker run -d -p 1336:3000 -e PASSWORD123456 --name webtop lscr.io/linuxserver/webtop:ubuntu-kde登录 …

随身 WiFi 连接 X-Wrt 共享网络与 IPv6 中继配置

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 之前分享的《随身 WiFi 通过 USB 连接路由器共享网络 扩展网络覆盖范围》介绍了随身 WiFi 通过 USB 连接到路由器共享网络,其中留下两个小问题没有解决: OpenWrt 无法识别中兴微的…

3.银河麒麟V10 离线安装Nginx

1. 下载nginx离线安装包 前往官网下载离线压缩包 2. 下载3个依赖 openssl依赖,前往 官网下载 pcre2依赖下载,前往Git下载 zlib依赖下载,前往Git下载 下载完成后完整的包如下: 如果网速下载不到请使用网盘下载 通过网盘分享的文件…

家用无线路由器的 2.4GHz 和 5GHz

家中的无线路由器 WiFi 名称有两个,一个后面带有 “5G” 的标记,这让人产生疑问:“连接带‘5G’的 WiFi 是不是速度更快?” 实际上,这里的 “5G” 并不是移动通信中的 5G 网络,而是指路由器的工作频率为 5G…

【HarmonyOS NEXT】鸿蒙原生应用“上述”

鸿蒙原生应用“上述”已上架华为应用市场,欢迎升级了鸿蒙NEXT系统的用户下载体验,用原生更流畅。 个人CSDN鸿蒙专栏欢迎订阅:https://blog.csdn.net/weixin_44640245/category_12536933.html?fromshareblogcolumn&sharetypeblogcolumn&a…

AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python

支持向量机是AI开发中最常见的一种算法。之前我们已经一起初步了解了它的概念和应用,今天我们用它来进行一次文本情感分析训练。 一、概念温习 支持向量机(SVM)是一种监督学习算法,广泛用于分类和回归问题。 它的核心思想是通过…

Linux部署spring项目基础教程

目录 一、安装jdk(yum安装) 1.查看是否有jdk ​编辑 2.查找你想安装的jdk版本 3.安装你需要的版本 4.重复第一步查看版本号,看到版本号说明安装成本 二、部署服务 1.上传jar包 2.启动服务 3.脚本启动 自己搞了个服务器,部署了一个demo项目,把部署流程记录下 一、…

JS中的原型与原型链

1. 基本概念 原型(Prototype):每个对象都有一个内部属性 [[Prototype]],通常通过 __proto__ 访问(非标准,但广泛支持)。 原型链(Prototype Chain):对象通过原…

如何从 0 到 1 ,打造全新一代分布式数据架构

导读:本文从 DIKW(数据、信息、知识、智慧) 模型视角出发,探讨数字世界中数据的重要性问题。接着站在业务视角,讨论了在不断满足业务诉求(特别是 AI 需求)的过程中,数据系统是如何一…

Docker完整技术汇总

Docker 背景引入 在实际开发过程中有三个环境,分别是:开发环境、测试环境以及生产环境,假设开发环境中开发人员用的是jdk8,而在测试环境中测试人员用的时jdk7,这就导致程序员开发完系统后将其打成jar包发给测试人员后…

华为 AI Agent:企业内部管理的智能变革引擎(11/30)

一、华为 AI Agent 引领企业管理新潮流 在当今数字化飞速发展的时代,企业内部管理的高效性与智能化成为了决定企业竞争力的关键因素。华为,作为全球领先的科技巨头,其 AI Agent 技术在企业内部管理中的应用正掀起一场全新的变革浪潮。 AI Ag…

Idea使用阿里云创建springboot项目

文章目录 创建springboot项目选择Spring Initializr配置Server URL 创建springboot项目 选择Spring Initializr 配置Server URL https://start.aliyun.com

安全教育培训小程序系统开发制作方案

安全教育培训小程序系统是为了提高公众的安全意识,普及安全知识,通过微信小程序的方式提供安全教育培训服务,帮助用户了解并掌握必要的安全防范措施。 一、目标用户 企业员工:各岗位员工,特别是IT部门、财务、行政等对…