127 lines
3.0 KiB
Markdown
127 lines
3.0 KiB
Markdown
#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' *`|
|
||
|
||
> 提示:操作前建议备份重要文件!批量重命名可先在测试目录验证命令效果。 |