bash, rename 技巧

本文介绍了如何使用shell脚本进行文件名自动化处理,包括通过参数调用的nameXxx函数,用于根据文件类型添加前缀并移动到指定目录。

改这个

在这里插入图片描述



使用:


 NewP git:(sb_tea) ✗ name /Users/jzd/Pictures/Lumiere/X/NewP/Player_logic_Xxx_req.swift 
/Users/jzd/Pictures/Lumiere/X/NewP
mv /Users/jzd/Pictures/Lumiere/X/NewP/P_Ctrl_bg.swift /Users/jzd/Pictures/Lumiere/X/NewP/jouer_P_Ctrl_bg.swift
mv /Users/jzd/Pictures/Lumiere/X/NewP/P_Ctrl_pop.swift /Users/jzd/Pictures/Lumiere/X/NewP/jouer_P_Ctrl_pop.swift
mv /Users/jzd/Pictures/Lumiere/X/NewP/PlayerController_entry.swift /Users/jzd/Pictures/Lumiere/X/NewP/jouer_PlayerController_entry.swift



代码:


nameX(){
  cd "$(dirname "$1")" && pwd	
  for d in "$(dirname "$1")"/*; do
        if [ "$#" -eq 1 ]; then
    	    if [ -f  "$d" ]; then
                mv "$d" "$(dirname "$d")/jouer_$(basename "$d")"
            fi         
        fi
  done
  
}



alias name="nameX"



通过两个参数,来命名

调用

➜ mineFinal git:(main) ✗ nnn /Users/jzd/Desktop/CYLTabBarControllerLean/Example/Classes/LottieTwo/newsThird/img_2.png 55

代码:


nameXxx(){
  cd "$(dirname "$1")" && pwd	
  for d in "$(dirname "$1")"/*; do
       
    	    if [ -f  "$d" ]; then
                mv "$d" "$(dirname "$d")/${2}_$(basename "$d")"
            fi         
        
  done
  
}



alias nnn="nameXxx"


<think> 我们正在回答用户关于Linux系统中rename命令使用方法的问题。根据引用资料,我们知道rename命令主要用于批量重命名文件,特别擅长使用正则表达式进行模式匹配的重命名操作。需要注意的是,不同Linux发行版中的rename命令可能有所不同,主要分为C语言版本和Perl版本,其中Perl版本功能更强大且更常见。 我们将按照以下结构组织回答: 1. rename命令简介:说明其作用和优势 2. 安装与版本:说明如何安装及不同版本的区别 3. 基本语法:Perl版本和C语言版本的语法格式 4. 常用选项:列出常用选项并解释 5. 使用示例:提供多个常见使用场景的示例 6. 注意事项:使用rename时需要注意的问题 同时,根据引用资料,特别注意: - 在CentOS等Red Hat系发行版中,通常安装的是C语言版本的rename(由util-linux套件提供) - 在Ubuntu等Debian系发行版中,通常安装的是Perl版本的rename(由perl包提供) 下面开始撰写回答: </think> ### Linux `rename` 命令详解:高效批量重命名工具 `rename` 命令是 Linux 下批量重命名文件的利器,尤其擅长通过**正则表达式**处理复杂规则的重命名任务。与基础的 `mv` 命令相比,其核心优势在于**模式匹配能力**和**批量操作效率**。以下是完整使用方法: --- #### 1. **版本差异与安装** 不同 Linux 发行版默认安装的 `rename` 版本不同: - **Perl 版本**(功能强大,推荐): ```bash # Ubuntu/Debian 安装 sudo apt install rename # 验证版本(显示 Perl 正则语法) rename --version # 输出:Perl rename 1.30 ``` - **C 语言版本**(基础功能): ```bash # CentOS/RHEL 默认安装(util-linux 套件) rename -V # 输出:rename from util-linux 2.37.4 ``` > **关键区别**:Perl 版本支持正则表达式,C 版本仅支持简单字符替换[^1][^4]。 --- #### 2. **Perl 版本语法与示例** **基础语法**: ```bash rename [选项] 's/<原模式>/<新模式>/<修饰符>' <文件列表> ``` | 选项 | 作用 | |-----------|----------------------| | `-n` | 模拟执行(测试效果) | | `-v` | 显示详细过程 | | `-f` | 强制覆盖已存在文件 | **常用示例**: ```bash # 1. 修改扩展名(.txt → .log) rename -v 's/\.txt$/.log/' *.txt # 输出:a.txt renamed as a.log # 2. 删除文件名中的空格 rename 's/ //g' * # "file 1.jpg" → "file1.jpg" # 3. 添加前缀(使用捕获组) rename 's/(.*)/prefix_$1/' *.jpg # img.jpg → prefix_img.jpg # 4. 大小写转换(修饰符 i 忽略大小写) rename 's/IMG_/photo_/i' *.jpeg # IMG_001.jpeg → photo_001.jpeg ``` > **正则说明**: > - `s/old/new/`:替换操作 > - `\.`:转义点字符(`.`) > - `(.*)`:捕获整个文件名 > - `g`:全局替换(处理多处匹配)[^2][^3] --- #### 3. **C 语言版本语法与示例** **基础语法**: ```bash rename [选项] <原字符串> <新字符串> <文件列表> ``` **示例**: ```bash # 替换固定字符串(将 "report" 替换为 "backup") rename report backup report_*.txt # report_Q1.txt → backup_Q1.txt ``` > **局限**:不支持正则表达式,仅适合简单文本替换[^4]。 --- #### 4. **高级批量操作技巧** - **按序号重命名**: ```bash # 为所有 .png 添加数字序号(001, 002...) rename 's/(.*)/sprintf("image_%03d.png", ++$i)/e' *.png ``` - **条件重命名**: ```bash # 仅重命名长度超过 10 字符的文件 rename 'if (length($_) > 10) { s/^/short_/ }' * ``` --- #### 5. **注意事项** 1. **空格处理**:文件名含空格时需用引号包裹 `"file name.txt"` 2. **备份操作**:建议先用 `-n` 模拟测试: ```bash rename -n 's/old/new/' * # 显示拟执行操作但不实际修改 ``` 3. **覆盖风险**:新文件名冲突时默认**静默覆盖**,可用 `-o` 避免(仅 C 版本)[^1] 4. **符号链接**:重命名符号链接时,目标文件不受影响 > 💡 **最佳实践**:批量操作前用 `ls` 确认文件列表,复杂场景优先选用 Perl 版本[^3][^4]。 --- 通过灵活运用正则表达式,`rename` 命令可大幅提升文件管理效率,尤其在日志整理、数据清洗等场景中表现突出。建议掌握 Perl 版本的核心语法以应对多样化需求。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值