Linux cung cấp nhiều cơ chế khác nhau để đổi tên file qua GUI lẫn terminal, đồng thời còn cho phép đổi tên nhiều file cùng một lúc. Bài viết này sẽ hướng dẫn các cách rename file trong Linux đơn giản nhất.
Rename file trong Linux bằng lệnh mv
Lệnh mv (move) trong Linux được dùng để di chuyển file và thư mục thông qua terminal. Cú pháp của lệnh như sau:
mv [options] [nguồn] [đích]
Nếu đích là một thư mục thì lệnh mv
sẽ di chuyển file đến thư mục đó. Mặt khác, nếu đích
là tên một file khác thì lệnh sẽ rename file thành tên tương ứng.
Rename một file bằng lệnh mv
Cú pháp mặc định của mv
cho phép ta rename một file:
mv [options] [tên file hiện tại] [tên file mới]
Chẳng hạn ta cần đổi tên file text1.txt thành text0.txt thì câu lệnh sẽ như sau:
mv text1.txt text0.txt
Lưu ý rằng lệnh này không có output gì khi thực hiện thành công, nên ta có thể dùng lệnh ls
để kiểm tra xem file đã được đổi tên thành công chưa:
ls -l
Rename nhiều file bằng lệnh mv
Về bản chất thì mv
chỉ cho phép rename một file, nhưng ta hoàn toàn có thể kết hợp nó với những câu lệnh khác để đổi tên nhiều file cùng một lúc.
Cách thứ nhất, ta có thể dùng lệnh find
để chọn nhiều file có tên giống nhau, rồi áp dụng lệnh mv
để rename cùng một lúc:
find . -depth -name "[phần tử tên file hiện tại]" -exec sh -c 'f="{}"; mv -- "$f" "${f%[phần tử tên file hiện tại]}[phần tử tên file mới]"' \;
Trong cú pháp trên, lệnh find
định nghĩa một phần tử là tên file hiện tại, có vai trò như một tham số để tìm kiếm. Tiếp theo, -exec
sẽ thực thi lệnh mv
lên mọi file khớp với lệnh tìm kiếm và thực hiện rename file trong Linux.
Chẳng hạn ta có các file example1.txt, example2.txt, example3.txt và muốn đổi phần mở rộng thành .pdf
:
find . -depth -name "*.txt" -exec sh -c 'f="{}"; mv -- "$f" "${f%.txt}.pdf"' \;
Kết quả:
Cách thứ hai, ta có thể dùng lệnh mv
bên trong vòng lặp <strong>for</strong>
trong bash script.
Quay lại ví dụ ở trên, trước tiên ta cần tạo và mở một file bash script (có thể mở bằng Nano):
sudo nano rename_files.sh
Thêm các dòng sau vào script:
#!/bin/bash
for f in *.txt; do
mv -- "$f" "${f%.txt}.pdf"
done
Trong đó:
- Dòng đầu tiên yêu cầu script tìm kiếm mọi file trong directory hiện tại, có đuôi là .txt.
- Dòng thứ hai áp dụng lệnh mv lên mọi file rồi thay phần mở rộng .txt thành .pdf.
- Dòng thứ ba kết thúc vòng lặp.
Sau đó nhấn Ctrl+X, nhập Y rồi nhấn Enter để lưu lại thay đổi trong script và thoát file.
Bây giờ dùng lệnh sh
để thực thi script:
sh rename_files.sh
Rename file trong Linux bằng lệnh rename
Lệnh rename
được dùng để rename nhiều file hoặc directory trong Linux, cung cấp nhiều tính năng hơn lệnh mv
thuần tuý nhưng có thể khó sử dụng hơn một chút vì cần có kiến thức liên quan đến biểu thức trong Perl.
Cách cài đặt lệnh rename
Trên một số bản phân phối Linux thì lệnh rename
không có sẵn, khi đó bạn có thể cài đặt như sau:
- Đối với Ubuntu và Debian, dùng lệnh
sudo apt install rename
- Đối với CentOS và Fedora:
sudo yum install prename
- Đối với Arch Linux:
sudo pacman -S rename
Cú pháp và tuỳ chọn trong lệnh rename
Có ba loại biểu thức chính quy trong Perl: match
(khớp), substitute
(thay thế) và translate
(dịch). Lệnh rename
sử dụng substitute và translate để đổi tên file và thư mục.
Biểu thức substitute có khả năng thay một phần của tên file thành một xâu khác, dựa theo cú pháp sau:
rename [options] 's/[phần tử tên file]/[xâu thay thế]/' [filename]
Câu lệnh trên rename file bằng cách thay thế phần tử tên file bằng xâu thay thế (chỉ thay thế chuỗi đầu tiên khớp được):
rename
: gọi lệnh rename[options]
: các đối số tuỳ chọn, ảnh hưởng đến cách thực thi lệnhs
: biểu thức substitute[phần tử tên file]
: bộ phận của tên cần thay thế[xâu thay thế]
: xâu để thay thế cho bộ phận của tên khớp được[filename]
: tên của file cần rename
Biểu thức translate có khả năng dịch một chuỗi ký tự thành một chuỗi khác (dịch từng ký tự). Cú pháp:
rename [options] 'y/[string 1]/[string 2]/' [filename]
Ví dụ:
rename 'y/abc/xyz/'
Ở lệnh trên, mọi ký tự a trong tên file sẽ được thay thế bằng x, mọi ký tự b được thay thành y, và mọi ký tự c được thay bằng z.
Lệnh rename có những option như sau:
-a
: Thay mọi xâu khớp được của phần tử tên file (thay vì chỉ thay thế xâu đầu tiên)-f
: Ghi đè file hiện tại-h
: Hiển thị hỗ trợ, hướng dẫn-i
: Hiển thị thông báo trước khi ghi đè file-l
: Thay thế xâu cuối cùng khớp được của phần tử tên file (thay vì chỉ xâu đầu tiên)-n
: Chỉ chạy thử, không thay đổi vĩnh viễn-v
: Hiển thị output đầy đủ (verbose)-V
: Hiển thị phiên bản lệnh
Các ví dụ với lệnh rename
Đổi phần mở rộng của file
Quay trở lại ví dụ trước, để đổi phần mở rộng từ .txt sang .pdf ta có thể dùng:
rename -v 's/.txt/.pdf/' *.txt
Thay đổi một phần của tên file
Việc thay đổi một phần của tên file cũng có cú pháp tương tự ở trên. Để đổi example1.txt, example2.txt và example3.txt thành test1.txt, test2.txt và test3.txt ta làm như sau:
rename -v 's/file/text/' *.pdf
Xoá một phần của tên file
Các option của rename cho phép ta xoá một phần của tên file bằng cách bỏ phần thay thế trong biểu thức. Chẳng hạn ta cần đổi example thành ex:
rename -v 's/text//' *.pdf
Rename nhiều file có tên giống nhau
Ta cũng có thể rename nhiều file một lúc bằng lệnh rename như sau:
rename -v 's/(ex|s)ample/text/' *.pdf
Mọi file có tên dạng example và sample đều được đổi thành test.
Rename file theo từng ký tự
Lệnh rename cũng cho phép dùng biểu thức translate để đổi tên file theo từng ký tự. Chẳng hạn ta muốn rename nhiều file có tên text, thêm dấu __ ở giữa text và số :
rename -v 's/xt/xt_/' *.pdf
Đổi sang ký tự in thường
Để đổi ký tự in hoa thành in thường trong tên file:
rename -v 'y/A-Z/a-z/' *.TXT
Đổi sang ký tự in hoa
Ngược lại, để đổi sang in hoa:
rename -v 'y/a-z/A-Z/' *.txt
Kết luận
Qua bài viết này, ta đã biết được nhiều cách khác nhau để rename file trong Linux, chủ yếu bằng hai lệnh mv và rename. Ngoài ra Linux còn cho phép đổi tên nhiều file cùng một lúc bằng cách kết hợp một số câu lệnh đơn giản với nhau hoặc dùng lệnh rename. Chúc các bạn thành công!