Tại sao ký tự đại diện này không hoạt động theo cách tôi mong đợi?


11

Mở thư mục người dùng của tôi, tôi có các thư mục như D ropbox, D ocuments, D ownloads & d UMP.

ls a*nên liệt kê tất cả các tập tin có tên bắt đầu bằng a. Đúng? Nhưng khi tôi đưa ra lệnh ls d*, thay vì chỉ hiển thị, dumpnó hiển thị cho tôi ls của thư mục dump. Và khi tôi đưa ra lệnh như ls D*sau, nó sẽ hiển thị ls của tất cả các nếp gấp bắt đầu bằng D

Vì vậy, phần nào tôi đã bỏ lỡ trong việc hiểu nó?

Chỉnh sửa: Đính kèm ảnh chụp màn hình ảnh chụp màn hình

Câu trả lời:


17

Theo trang bash man:

bash quét từng từ cho các ký tự *,?, và [. Nếu một trong những ký tự này xuất hiện, thì từ đó được coi là một mẫu và được thay thế bằng một danh sách tên tệp được sắp xếp theo thứ tự bảng chữ cái phù hợp với mẫu

và từ nút thông tin cho ls

Chương trình `ls 'liệt kê thông tin về các tệp (thuộc bất kỳ loại nào, bao gồm cả các thư mục). Các tùy chọn và đối số tệp có thể được trộn lẫn tùy ý, như thường lệ.

Đối với các đối số dòng lệnh không phải là tùy chọn là thư mục, theo mặc định, 'ls' liệt kê nội dung của các thư mục, không đệ quy và bỏ qua các tệp có tên bắt đầu bằng '.'. Đối với các đối số không phải tùy chọn khác, theo mặc định `ls 'chỉ liệt kê tên tệp. Nếu không có đối số không phải tùy chọn nào được chỉ định, 'ls' sẽ liệt kê nội dung của thư mục hiện tại.

vì vậy khi yo give ls d*, d * được mở rộng thành danh sách được sắp xếp của tất cả các tên tệp / thư mục bắt đầu bằng d. Vì vậy, lệnh của bạn trở thành

ls dump

và vì dump là tên thư mục để bạn có được danh sách tất cả các tệp trong thư mục "dump" nhưng khi bạn đưa ra ls D*, D * được mở rộng thành " Dropbox Tài liệu máy tính để bàn ", do đó lệnh trở thành

ls Desktop Documents Downloads Dropbox

và vì tất cả đều là thư mục, bạn có được danh sách các tệp trong thư mục riêng lẻ. Nếu có một tập tin bắt đầu bằng D trong thư mục hiện tại thì nó sẽ được liệt kê một cách riêng biệt.


2
Một bổ sung nhỏ: Khi có nhiều hơn một thư mục được đưa ra làm đối số, ls sẽ hiển thị tên của từng thư mục trước khi liệt kê nội dung của nó. Nó sẽ không làm điều đó cho một thư mục duy nhất.
Marcel Promotionberg

Cảm ơn! Điều đó đã xóa tan nghi ngờ của tôi. Tôi đã làm một ls p*và nó xuất hiện một tập tin vì nó tồn tại và một ls P*chương trình các Hình Công folder như không có tập tin bắt đầu với P . Và khi tôi tạo một thư mục có tên poo , nó xuất hiện trênls p*
Ashfame

7

ls d * và D * cả hai danh sách tệp và thư mục khớp với d * và D *, hành vi là như nhau, chắc chắn đã có lỗi trong bài kiểm tra của bạn.

Nếu bạn chỉ muốn liệt kê tên thư mục chứ không phải nội dung thư mục bạn cần sử dụng "-d":

ls -d D*

Tôi đã đính kèm ảnh chụp màn hình, vui lòng xem
Ashfame

0

Như đề xuất ở trên, -dtùy chọn là cách để đi. Thêm

alias ld='ls -d'

để ~/.bashrctập tin của tôi hoạt động tốt cho tôi.


3
Với bí danh này, bạn chặn truy cập dễ dàng ld - The GNU linker, điều này sẽ ngăn OP biên dịch và liên kết các chương trình. Sử dụng alias lsd='ls -d'thay thế. Trước khi đặt bí danh một cái gì đó fooluôn luôn type foođể xem liệu foođã được sử dụng làm tên cho một cái gì đó chưa, và quyết định xem sự tiện lợi của bí danh có ghi đè lên việc mất quyền truy cập vào trước đó hay khôngfoo
ví dụ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.