Có tùy chọn nào với lệnh 'ls' mà tôi chỉ thấy các thư mục không?


74

Đôi khi, tôi chỉ cần kiểm tra các thư mục không phải tập tin. Có tùy chọn nào với lệnh ls không? Hoặc có bất kỳ tiện ích để làm điều đó?

EDIT : Tôi đang sử dụng Mac OS X và ls -dcung cấp cho tôi .mặc dù tôi có các thư mục.


4
Ai đó có thể giải thích tại sao ls -dchỉ đưa ra .và tại sao */phải thêm vào cuối để làm cho nó hoạt động?
cwd

3
@cwd Nếu bạn không chỉ định bất kỳ tệp nào, lsmặc định là .. Và -dcó nghĩa là không in nội dung của thư mục, in chính thư mục đó.
Mikel

1
@cwd thử sử dụng ls -pnó hiển thị /sau tên thư mục. Vì vậy, */chỉ là một mẫu phù hợp với tên và /kết hợp thư mục.
Pitt

Tôi đã tạo một hàm thực hiện câu trả lời của @ Steven_D cho tệp ~ / .bash_aliases của tôi: gist.github.com/rjurney/998f4951a57bfa5daeb9a6c18f6f4827
rjurney

Câu trả lời:


84

Tôi biết đã có câu trả lời được chọn, nhưng bạn có thể nhận được hành vi được yêu cầu chỉ bằng ls:

ls -ld -- */

(Lưu ý rằng '-' đánh dấu sự kết thúc của các tham số, ngăn tên thư mục bắt đầu bằng dấu gạch nối không được hiểu là các tùy chọn lệnh tiếp theo.)

Điều này sẽ liệt kê tất cả các thư mục không bị ẩn (trừ khi bạn định cấu hình các khối của vỏ để mở rộng chúng) trong thư mục làm việc hiện tại nơi nó được chạy (lưu ý rằng nó cũng bao gồm các liên kết tượng trưng đến các thư mục). Để có được tất cả các thư mục con của một số thư mục khác, chỉ cần thử:

ls -ld /path/to/directory/*/

Lưu ý rằng -l là tùy chọn.


5
Đẹp. Tôi chưa bao giờ nghĩ rằng các thư mục có một ẩn ý /ở cuối - nhưng bây giờ tôi thấy bạn trả lời nó có ý nghĩa. Rốt cuộc, hoàn thành tab luôn thêm nó.
gvkv

-d for dir, -l for long format. mục đích của là --gì?
Dineshkumar

1
Mặc dù điều này có vẻ ngắn và hoạt động trong hầu hết các trường hợp, người ta có thể không muốn sử dụng phương pháp này khi cần một thư mục thực sự, không phải là liên kết tượng trưng của thư mục. Vì vậy, findthực sự là một lựa chọn tốt trong trường hợp đó.
biocyberman

1
findcũng có lợi thế khi số lượng thư mục vượt quá độ dài đối số tối đa.
Steven D

Làm việc ngược, tôi chỉ nhận ra rằng bạn có thể đơn giản bỏ qua mọi thứ với tiện ích mở rộng : ls -alhF --ignore=*.*. Không chắc chắn điều này sẽ xử lý tốt các thư mục 'ẩn' như thế nào, tức là.myHiddenFolder
Timmah

14

Không, nhưng một findlệnh đơn giản sẽ làm điều đó:

find . -type d -depth 1

hoặc là grep

ls -F | grep /

Sau đó, bạn có thể bí danh một trong những nếu cần thiết.


6
Trên Ubuntu 14.04, nó đã được -maxdepth 1. Cũng findmuốn tôi lật đơn hàng:find . -maxdepth 1 -type d
Brad Cupit

ls -F | grep /Giải pháp đó có tác dụng kỳ diệu! Nó dường như là người duy nhất tôi có thể làm việc trên máy FreeBSD của mình. Tôi nghĩ rằng sử dụng Cá có nghĩa là bất cứ điều gì với */có thể không hoạt động?
cjm

Tôi chưa bao giờ làm việc với Fish nên tôi không chắc về điều đó nhưng tùy chọn -F có thể làm việc kỳ diệu.
gvkv

7

Tôi thích tiện ích cây để có cái nhìn tổng quan về cấu trúc thư mục. Nó có sẵn trong MacPorts và tất cả các bản phân phối Linux mà tôi đã thử.

tree -d -L 2

Điều đó sẽ hiển thị tất cả các thư mục, hai cấp độ sâu.


6

Tôi cũng cần phải xem các thư mục ẩn vì vậy đã sửa đổi đề xuất ở trên để phù hợp với nhu cầu của tôi

ls -d -- */ .*/

(tùy thuộc vào vỏ, cũng có thể bao gồm ...)


2

Với zsh(như được tìm thấy theo mặc định trên macOS, nó thậm chí đã từng /bin/shở đó), bạn sẽ sử dụng vòng loại toàn cầu để chọn các tệp dựa trên loại của chúng:

  • Liệt kê các thư mục không bị ẩn:

    ls -d -- *(/)
    
  • Liệt kê tất cả các thư mục:

    ls -d -- *(D/)
    

    ( ...luôn bị loại trừ, thêm chúng riêng lẻ nếu bạn muốn)

  • Cũng bao gồm các liên kết tượng trưng đến thư mục:

    ls -d -- *(D-/)
    

    ( -làm cho vòng loại tiếp theo được áp dụng sau khi phân giải symlink).


-1

Tôi nghĩ rằng tôi có một lỗi trên Mac OS X. Một cách giải quyết là sử dụng grep ... ls -l / | grep "^d"


1
Thật vui khi biết tôi không phải là người duy nhất sử dụng grep "^d"hack
Michael Mrozek

6
Theo như tôi biết, hành vi mà anh ta mô tả không phải là một lỗi và cũng tương tự nếu một người đang sử dụng GNU ls. Tùy chọn -d hiển thị danh sách cho thư mục chứ không phải nội dung. Để xem lý do tại sao điều này có thể hữu ích, hãy xem sự khác biệt giữa: ls -l /homels -dl /home
Steven D

Carats không đặc biệt cho vỏ. Bạn chỉ có thể sử dụng ls -l / | grep ^d. Nếu bạn đang đi để sử dụng dấu ngoặc kép, vì bạn không cần phải mở rộng tham số, làm cho họ đơn dấu ngoặc kép. ls -l / | grep '^d'. Vâng, tôi là một giáo viên. Nhưng thực sự, làm điều này. :)
tự đại diện

-1
$ ls -p | grep /

Các -plá cờ sẽ làm lsthêm một dấu gạch chéo ( `/ ') sau mỗi tên tập tin nếu tập tin đó là một thư mục.


-2

Cách dễ nhất là gõ lệnh sau. Điều này hoạt động trên hầu hết các nền tảng và phiên bản UNIX và Linux. Bạn có thể bỏ qua -Fnếu bạn muốn, nhưng đó là đối số thêm / vào cuối tên thư mục. Đối -Csố chỉ ghi lại tên thư mục - tất cả chúng trong thư mục hiện tại. Nếu bạn muốn chỉ xem các thư mục và thư mục con trong đường dẫn hiện tại, chỉ cần thêm -Rđối số ( ls -CFR).

# ls -CF
/dir1  /dir2  /dir3  /beaches  /Work  /Other 

1
Trong tất cả các lstriển khai tôi biết và trong đặc tả POSIX của ls, -Clà xuất ra các cột , không bỏ qua các tệp không phải thư mục. Trong ví dụ của bạn, /chúng được in trước tên tệp mà không có cách lsthực hiện nào. Với -F, /được gắn vào tên tệp cho tệp thư mục.
Stéphane Chazelas

Khi tôi thấy câu trả lời này, tôi đã tự hỏi rằng đây là sự thật ở đâu? Đây là một sự thật?
G-Man

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.