Hướng dẫn sử dụng lệnh basename trong Linux

Hướng dẫn chi tiết cách sử dụng lệnh basename trong Linux cùng các ví dụ cho bạn đọc tham khảo.

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.

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.

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

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.

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

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 >>> Xem thêm về lệnh mv trong Linux TẠI ĐÂY

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.

Nguồn: freetuts