Files
obsidian-vault/06 平台与配置/怎么在linux中给文件重命名.md
2026-06-23 00:24:32 +08:00

127 lines
3.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#linux #ubuntu
在Linux命令行界面中文件重命名主要通过以下方法实现涵盖单文件重命名、批量操作及常见问题处理
---
### 📁 **​一、单文件重命名:`mv`命令​**
**​语法​**
```
mv [选项] 旧文件名 新文件名
```
**​示例​**
```
mv old_file.txt new_file.txt # 将文件重命名
mv file.txt /new/path/renamed.txt # 移动并重命名
```
**​常用选项​**
- `-i`:覆盖前确认(避免误操作)
- `-v`:显示操作详情
- `-b`:覆盖前备份原文件
**​场景​**
- 简单重命名或移动文件到新路径时使用。
---
### 🔄 **​二、批量重命名:`rename`命令Perl版**
**​安装​**​(部分系统需手动安装):
```
sudo apt install rename # Debian/Ubuntu
sudo yum install perl-rename # CentOS/RHEL
```
**​语法​**
```
rename 's/旧模式/新模式/' 文件列表
```
**​示例​**
```
rename 's/\.txt/.md/' *.txt # 扩展名.txt→.md
rename 's/old_/new_/' *.log # 文件名中old_→new_
rename 's/\s+/_/g' * # 空格替换为下划线
rename -n 's/pattern//' *.log # 仅预览不执行(-n选项
```
**​优势​**​:支持正则表达式,灵活处理复杂规则。
---
### 🔁 **​三、循环批量重命名:`for` + `mv`**
**​语法​**
```
for file in 匹配模式; do mv "$file" "新文件名"; done
```
**​示例​**
```
# 所有.txt文件添加前缀"backup_"
for f in *.txt; do mv "$f" "backup_$f"; done
# 扩展名.txt→.bak
for f in *.txt; do mv "$f" "${f%.txt}.bak"; done
```
**​适用场景​**
-`rename`命令或需简单逻辑时使用。
---
### ⚠️ **​四、注意事项与常见问题​**
1. **​权限问题​**
- 无权限时报错,使用`sudo`提权:
```
sudo mv protected_file new_name
```
2. **​文件名冲突​**
- 目标文件已存在时,`mv`会覆盖(用`-i`避免误覆盖):
```
mv -i old.txt existing.txt # 覆盖前询问
```
3. **​特殊字符处理​**
- 文件名含空格或特殊符号时,用引号包裹:
```
mv "file with spaces.txt" no_spaces.txt
```
4. **​批量操作风险​**
- 使用`rename -n`预览效果后再执行。
---
### 💎 **​五、场景推荐​**
|**​需求​**|**​推荐命令​**|**​示例​**|
|---|---|---|
|单文件重命名|`mv`|`mv a.txt b.txt`|
|批量修改扩展名|`rename`|`rename 's/\.log/.bak/' *.log`|
|文件名添加统一前缀|`for`循环|`for f in *; do mv "$f" "prefix_$f"; done`|
|复杂规则(正则表达式)|`rename`|`rename 's/\d+/sprintf("%03d", $&)/e' *`|
> 提示:操作前建议备份重要文件!批量重命名可先在测试目录验证命令效果。