Có, rm *.xvg
sẽ chỉ xóa các tệp kết thúc bằng .xvg
trong thư mục hiện tại của bạn. Đây là lý do tại sao.
Khi bạn gõ một lệnh như thế này, công việc sẽ được phân chia giữa trình bao bạn đang sử dụng (giả sử bash) và lệnh nhị phân.
Bạn có thể xác định vị trí nhị phân bằng cách gõ which rm
. Chương trình nhỏ này chăm sóc các tập tin hủy liên kết. Các chương trình như thế này có thể được bắt đầu từ dòng lệnh và có thể đọc danh sách các đối số prog arg1 arg2 arg3
khi chúng khởi động. Trong trường hợp rm
, chúng được hiểu là một danh sách các tên tệp đủ điều kiện sẽ bị xóa. Vì vậy, nếu bạn đang ở trong một thư mục chứa tệp foo.bar
, việc gõ delete 'foo.*'
sẽ dẫn đến rm: foo.*: No such file or directory
. Lưu ý các dấu ngoặc đơn xung quanh mẫu tệp, chúng bảo shell chuyển đối số sang shell như vậy.
Tuy nhiên nếu bạn gõ rm *.bar
vào cùng thư mục, nó sẽ xóa tệp. Điều đang xảy ra ở đây là shell của bạn, là chương trình bạn đang sử dụng để gõ lệnh, đang thực hiện một số biến đổi trước khi chuyển các đối số cho lệnh. Một trong số này được gọi là 'mở rộng tên tệp', nếu không được gọi là 'toàn cầu'. Bạn có thể xem danh sách mở rộng tên tệp bash tại đây . Một trong những mở rộng phổ biến nhất là *
, được mở rộng thành tên tệp trong thư mục hiện tại.
Một cách đơn giản để xem xét các khối trong công việc là sử dụng echo
, nó in lại tất cả các đối số được truyền cho nó thông qua trình bao. Vì vậy, gõ echo *
trong cùng thư mục sẽ xuất ra foo.bar
. Vì vậy, khi bạn gõ rm *.bar
, điều thực sự xảy ra là shell sẽ mở rộng danh sách đối số foo.bar
, sau đó chuyển nó sang rm
lệnh.
Có một số cách để kiểm soát Globing. Ví dụ, trong các phiên bản gần đây của bash, bạn có thể bật tùy chọn có tên là globalstar để mở rộng đệ quy. Nhập echo **/*.bar
sẽ hiển thị một danh sách tất cả các tệp kết thúc .bar
trong tất cả các thư mục con. Vì vậy, gõ rm **/*.bar
bash trên sao được kích hoạt thực sự sẽ xóa đệ quy tất cả các tệp phù hợp trong các thư mục con.
rm -f {*.xvg,.*.xvg}
để loại bỏ các tập tin cũng ẩn. Vàrm -R -f {*.xvg,.*.xvg}
để loại bỏ cũng thư mục.