# ✨ دستورات پیشرفته `rename` برای تغییر نام فایلها و پوشهها در لینوکس
### تغییر نام گروهی فایلها با قدرت عبارات باقاعده (Regex)
در لینوکس، دستور `rename` ابزاری قدرتمند و منعطف برای تغییر نام دستهجمعی فایلها و دایرکتوریها است. برخلاف `mv` که فقط برای یک فایل یا پوشه کاربرد دارد، `rename` میتواند صدها فایل را تنها با یک دستور تغییر دهد.
---
## 🔧 نسخههای مختلف `rename`
در توزیعهای مختلف لینوکس، ممکن است دو نسخه از `rename` وجود داشته باشد:
| نسخه | زبان پیادهسازی | قدرت |
|------|------------------|--------|
| `util-linux rename` | C | ساده |
| `perl rename` | Perl | قدرتمند و Regex محور ✅ |
برای این آموزش ما از نسخه **Perl-based** استفاده میکنیم که معمولاً به صورت پیشفرض در Debian/Ubuntu با نصب پکیج زیر میاد:
```bash
sudo apt install rename
```
---
## ✅ سینتکس کلی:
```bash
rename 's/الگوی_قدیمی/الگوی_جدید/' فایلها
```
> `s` مخفف **substitute**، و از عبارات باقاعده (regex) برای تطبیق استفاده میکنه.
---
## 🧪 مثالهای کاربردی:
### 1. تغییر پسوند `.txt` به `.md`:
```bash
rename 's/\.txt$/.md/' *.txt
```
---
### 2. حذف یک کلمه از نام فایلها:
```bash
rename 's/^temp_//' temp_*.log
```
> تمام فایلهایی که با `temp_` شروع میشن، این پیشوند ازشون حذف میشه.
---
### 3. تبدیل حروف بزرگ به کوچک:
```bash
rename 'y/A-Z/a-z/' *
```
> تمام حروف نام فایلها رو به کوچک تبدیل میکنه.
---
### 4. افزودن پیشوند به فایلها:
```bash
rename 's/^/new_/' *.jpg
```
> فایلهایی مثل `image1.jpg` به `new_image1.jpg` تبدیل میشن.
---
### 5. افزودن پسوند جدید:
```bash
rename 's/$/.bak/' *.conf
```
> به انتهای فایلهای `.conf` پسوند `.bak` اضافه میشه.
---
### 6. تغییر الگوی عددی در نام فایلها:
```bash
rename 's/file_(\d+)/file-$1/' file_*.txt
```
> `file_123.txt` به `file-123.txt` تغییر میکنه.
---
## 👁🗨 پیشنمایش قبل از تغییر:
برای دیدن اینکه دستور چی قراره تغییر بده، قبل از اجرا از گزینهی `-n` استفاده کن:
```bash
rename -n 's/\.log$/.bak/' *.log
```
> این فقط تغییرات رو نمایش میده، اعمال نمیکنه.
---
## 🔄 حالت بازگشتی با `find` (برای پوشهها)
`rename` بهصورت پیشفرض روی دایرکتوریهای داخل زیرپوشهها کار نمیکنه. برای اینکار از `find` کمک بگیر:
```bash
find . -type f -name "*.JPG" -exec rename 's/\.JPG$/.jpg/' {} \;
```
---
## 🚫 نکات مهم:
- همیشه قبل از اجرای نهایی، از گزینه `-n` استفاده کن.
- دقت کن که regex درست بنویسی؛ اشتباه ممکنه باعث تغییرات ناخواسته بشه.
- بهتره قبل از rename گروهی، از فایلها بکاپ بگیری.
---
## 📚 جمعبندی دستورات پرکاربرد:
| دستور | کاربرد |
|--------|--------|
| `rename 's/a/b/'` | جایگزینی `a` با `b` |
| `rename 'y/A-Z/a-z/'` | حروف بزرگ به کوچک |
| `rename -n 's/x/y/'` | پیشنمایش تغییر |
| `rename 's/^/pre_/'` | افزودن پیشوند |
| `rename 's/$/.bak/'` | افزودن پسوند |