Cách dùng lệnh basename trong Linux
Trong bài này chúng ta sẽ học cách sử dụng lệnh basename thông qua cú pháp và những ví dụ thực hành cơ bản nhất nhé.
basename là một tiện ích dòng lệnh (command line) dùng để lấy tên file dựa vào chuỗi đường dẫn được nhập vào. Ngoài ra, nó cũng có thể xóa luôn cả dấu gạch chéo nếu nó xuất hiện ở vị trí cuối cùng trong chuỗi mà bạn đã nhập vào.
1. Cú pháp lệnh basename trong Linux
Cú pháp của lệnh này trong Linux như sau:
basename NAME [SUFFIX] basename OPTION... NAME...
Lệnh basename sẽ lấy tên file và in ra thành phần cuối cùng của tên file. Nó cũng có thể được dùng để xóa các hậu tố thông qua những tùy chọn mà chúng ta sẽ tìm hiểu ở phần 2.
Bài viết này được đăng tại [free tuts .net]
Ví dụ cơ bản nhất là in ra tên file bằng cách loại bỏ đi đường dẫn các thư mục mà file này đang đứng:
basename /etc/passwd
Kết quả:
passwd
Nếu chuỗi bạn truyền vào có dấu gạch chéo cuối cùng thì nó cũng xóa luôn dấu gạch chéo đó.
basename /usr/local/ basename /usr/local
Cả hai đều có kết quả là:
local local
2. Truyền nhiều chuỗi vào lệnh basename
Câu hỏi đặt ra là nếu ta truyền nhiều chuỗi vào lệnh basename thì chuyện gì sẽ xảy ra?
Thực tế thì lệnh basename chấp nhận nhiều đối số được truyền vào. Để làm điều này thì bạn hãy thêm tùy chọn -a(--miltiple) như sau:
basename -a /etc/passwd /etc/shadow
Kết quả:
passwd shadow
Cách gọi này chính là cách gọi rút gọn, thay vì gọi hai lần lệnh basename thì ta chỉ gọi một lần mà thôi.
3. Loại bỏ hậu tố của chuỗi theo yêu cầu bằng lệnh basename
Để loại bỏ hậu tố theo ý của mình thì bạn truyền vào hai tham số, trong đó tham số đầu tiên là chuỗi cần xử lý, tham số thứ hai là hậu tố muốn loại bỏ.
basename /etc/hostname name
Kết quả:
host
Nếu chạy lệnh bình thường thì nó sẽ trả về là hostname, nhưng vì ta truyền thêm tham số thứ hai là name nên trong kết quả trả về chuỗi hậu tố name cũng bị xóa.
Thông thường chúng ta dùng cách này để lấy tên file nhưng loại bỏ đi phần đuôi mở rộng.
basename /etc/sysctl.conf .conf
Kết quả:
sysctl
Một cách khác là ta se chỉ định hậu tố cần xóa với tùy chọn -s(--suffix).
basename -s .conf /etc/sysctl.conf
Kết quả:
sysctl
Với cách này bạn cũng có thể áp dụng xử lý cho nhiều chuỗi cùng lúc.
basename -a -s .conf /etc/sysctl.conf /etc/sudo.conf
Kết quả:
sysctl sudo
4. Một ví dụ thực tế về lệnh basename trong bash script
Chúng ta sẽ viết một đoạn mã script dùng để đổi tên tất cả các file hình như sau:
for file in *.jpeg; do mv -- "$file" "$(basename $file .jpeg).jpg" done
Đoạn code trên mình dùng lệnh mv để đổi tên file từ jpeg
sang jpg
.
Như vậy là chúng ta đã tìm hiểu xong cách sử dụng lệnh basename trong Linux, đây là lệnh được sử dụng để trích xuất giá trị cuối cùng của một chuỗi theo ký tự gạch chéo.
Thông thường chúng ta sử dụng basename command để xử lý đường dẫn URL và tên file trong Linux.