Chúng ta thường sử dụng lệnh “mv” để đổi tên một tệp tin trong Linux. Tuy nhiên, đổi tên nhiều hoặc một nhóm file nhanh chóng làm cho nhiệm vụ này trở nên rất khó khăn trong dòng lệnh.
Linux được trang bị một công cụ tích hợp mạnh mẽ gọi là rename. Lệnh rename được sử dụng để đổi tên nhiều hoặc một nhóm file, đổi tên các file thành chữ thường, đổi tên các file thành chữ hoa và ghi đè lên các file bằng biểu thức perl.

Lệnh “rename” là một phần của script Perl và nó nằm trong thư mục “/usr/bin/” trên nhiều bản phân phối Linux. Bạn có thể chạy lệnh “which” để tìm vị trí của lệnh rename.
$ which rename
/usr/bin/rename
Cú pháp cơ bản của lệnh Rename
rename 's/old-name/new-name/' files
Lệnh rename đi kèm với vài đối số tùy chọn cùng với biểu thức perl bắt buộc để hướng dẫn lệnh rename thực hiện công việc thực sự.
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
- -v: In ra tên các file được đổi tên thành công.
- -n: Hiển thị các file sẽ được đổi tên.
- -f: Ép buộc việc ghi đè lên các file đã tồn tại.
- perlexpr: Biểu thức Perl.
Để hiểu rõ hơn về tiện ích này, chúng ta đã thảo luận một vài ví dụ thực tế của lệnh này trong bài viết.
1. A Basic Rename Command Example
Giả sử bạn có một nhóm file có phần mở rộng “.html” và bạn muốn đổi tên tất cả các file “.html” thành “.php” một lần duy nhất. Ví dụ, trước tiên hãy chạy lệnh “ls -l” để kiểm tra danh sách các file có phần mở rộng “.html”.
# ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html
Bây giờ, bạn muốn thay đổi phần mở rộng của tất cả các file này từ “.html” thành “.php”. Bạn có thể sử dụng lệnh “rename” sau đây với biểu thức perl như được hiển thị dưới đây.
ravisaive@tecmint:~$ rename 's/\.html$/\.php/' *.html
Lưu ý: Trong lệnh trên, chúng ta đã sử dụng hai đối số.
- Đối số đầu tiên là biểu thức perl thay thế .html bằng .php.
- Đối số thứ hai cho biết lệnh rename thay thế tất cả các file bằng *.php.
Hãy xác nhận xem tất cả các file đã được đổi tên thành phần mở rộng “.php”, thực hiện ls -l trên dòng lệnh.
ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.php
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.php
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.php
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.php
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.php
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.php
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.php
Bây giờ bạn có thể thấy rằng tất cả các tệp tin html đã được đổi tên thành php.
2. Check Changes Before Running Rename Command
Khi thực hiện các nhiệm vụ đổi tên quan trọng hoặc có khối lượng lớn, bạn luôn có thể kiểm tra các thay đổi bằng cách chạy lệnh rename với đối số “-n”. Tham số “-n” sẽ cho bạn biết chính xác những thay đổi sẽ xảy ra, nhưng các thay đổi không được thực hiện thực sự. Dưới đây là ví dụ về lệnh.
ravisaive@tecmint:~$ rename -n 's/\.php$/\.html/' *.php
cricket.php renamed as cricket.html
entertainment.php renamed as entertainment.html
health.php renamed as health.html
lifestyle.php renamed as lifestyle.html
news.php renamed as news.html
photos.php renamed as photos.html
sports.php renamed as sports.html
Lưu ý: Lệnh trên chỉ hiển thị các thay đổi, nhưng thực tế các thay đổi không được thực hiện, trừ khi bạn chạy lệnh mà không sử dụng công tắc “-n”.
3. Print Rename Output
Chúng ta đã thấy rằng lệnh rename không hiển thị bất kỳ thông tin về các thay đổi nó thực hiện. Vì vậy, nếu bạn muốn biết chi tiết về lệnh rename (như chúng ta đã làm bằng cách sử dụng tùy chọn “-n”), bạn có thể sử dụng tùy chọn “-v” để in ra chi tiết đầy đủ về tất cả các thay đổi đã được thư hành bởi lệnh rename thành công.
ravisaive@tecmint:~$ rename -v 's/\.php$/\.html/' *.php
cricket.php renamed as cricket.html
entertainment.php renamed as entertainment.html
health.php renamed as health.html
lifestyle.php renamed as lifestyle.html
news.php renamed as news.html
photos.php renamed as photos.html
sports.php renamed as sports.html
4. Convert all Lowercase to Uppercase and Vise-Versa
Để đổi tên tất cả các file thành tên chữ viết hoa, sử dụng lệnh sau đây với biểu thức perl.
ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html
Sau khi bạn đã thực hiện lệnh trên, bạn có thể kiểm tra các thay đổi bằng cách thực hiện “ls -l“.
ravisaive@tecmint:~$ rename 'y/a-z/A-Z/' *.html
Bạn có thể thấy rằng lệnh trên thực sự đã đổi tên tất cả các file chứa chữ viết thường (với phần mở rộng .HTML) thành chữ viết hoa.
Chữ Hoa thành Chữ Viết Thường
Tương tự, bạn cũng có thể chuyển đổi tất cả các ký tự viết hoa thành viết thường sử dụng lệnh sau đây.
ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 CRICKET.HTML
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 ENTERTAINMENT.HTML
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 HEALTH.HTML
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 LIFESTYLE.HTML
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 NEWS.HTML
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 PHOTOS.HTML
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 SPORTS.HTML
ravisaive@tecmint:~$ rename 'y/A-Z/a-z/' *.HTML
5. Capitalize First Letter of Filename
Để viết hoa chỉ chữ cái đầu tiên của tên tệp tin, sử dụng lệnh sau đây.
ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html
6. Overwrite Existing Files
Nếu bạn muốn ghi đè lên các file đã tồn tại, hãy sử dụng tùy chọn “-f” như dưới đây.
# rename 's/\b(\w)/\U$1/g' *.ext
Nếu bạn muốn tìm hiểu thêm về lệnh rename, gõ “man rename” trong dòng lệnh.
Lệnh rename rất hữu ích nếu bạn đang làm việc với việc đổi tên nhiều hoặc theo nhóm của các file từ dòng lệnh. Hãy thử và cho tôi biết, đổi tên file có ích như thế nào đối với bạn.