Làm thế nào tôi có thể liệt kê các tập tin theo loại với ls?


20

Khi tôi sử dụng lslệnh với tùy chọn -l, chuỗi chữ cái đầu tiên sẽ cung cấp thông tin về mỗi tệp và chữ cái đầu tiên trong chuỗi này cung cấp loại tệp. ( d= thư mục, -= tệp tiêu chuẩn, l= liên kết, v.v.)

Làm thế nào tôi có thể lọc các tập tin theo chữ cái đầu tiên?


2
Hãy nghĩ những gì bạn muốn là đây: superuser.com/a/109542
devnull

Câu trả lời:


9

Bạn có thể lọc mọi thứ trừ các thư mục bằng cách grepnày:

ls -l | grep '^d'

^chỉ ra rằng mẫu nằm ở đầu dòng. Thay thế dbằng -, lvv, như áp dụng.

Tất nhiên bạn có thể sử dụng các lệnh khác để trực tiếp tìm kiếm các loại cụ thể (ví dụ find . -maxdepth 1 -type d) hoặc sử dụng ls -l | sortđể nhóm các loại tương tự lại với nhau dựa trên ký tự đầu tiên này, nhưng nếu bạn muốn lọc, bạn chỉ nên sử dụng grepđể chọn các dòng thích hợp từ đầu ra.


Lưu ý rằng nếu có symlink bạn có thể muốn sử dụng ls -lL. -Lsẽ theo symlink để hiển thị nếu nó được liên kết đến một thư mục hoặc một tập tin.
Nux

8

Nếu bạn muốn hiển thị tất cả đầu ra nhưng có các tệp cùng loại được liệt kê cùng nhau, bạn có thể sắp xếp đầu ra trên ký tự đầu tiên của mỗi dòng:

ls -l | sort -k1,1

Bất kỳ lý do cho các downvote?
Joseph R.

1
Có lẽ do sử dụng thói quen xử lý văn bản, thao tác văn bản đơn giản được coi là "không hợp lệ" hoặc "sai" trong số các loại nhà phát triển nhất định (như hầu hết các đồng nghiệp của tôi ...). Đưa ra một upvote cho một câu trả lời đơn giản và chính xác.
Mark K Cowan

8

Lệnh lsđang xử lý tên tệp , được ghi lại trong cấu trúc dữ liệu thư mục. Vì vậy, nó không thực sự quan tâm đến chính tệp, bao gồm cả "loại" của tệp.

Một lệnh phù hợp hơn để làm việc trên các tệp thực tế , không chỉ tên của nó, là find. Nó có một tùy chọn trả lời trực tiếp câu hỏi của bạn về cách lọc danh sách theo loại tệp.

Điều này đưa ra một danh sách của thư mục hiện tại tương tự như ls -l:

find . -maxdepth 1 -ls

Theo mặc định, findliệt kê các thư mục theo cách đệ quy, bị vô hiệu hóa bằng cách giới hạn độ sâu tìm kiếm xuống 1.
Bạn có thể bỏ qua ., nhưng tôi đã bao gồm nó để hiển thị các thư mục cần được liệt kê trước các tùy chọn.

Với -type, bạn có thể lọc theo loại tệp, được thể hiện dưới dạng fhoặc dcho các tệp hoặc thư mục đơn giản:

find . -maxdepth 1 -type d -ls

Có các giá trị bộ lọc khác -type, đáng chú ý là lcác liên kết tượng trưng.
Lưu ý rằng có một sự phức tạp với các liên kết tượng trưng :
Có hai loại tệp trong trường hợp này : l, biểu thị một liên kết tượng trưng và một cái gì đó giống như f, chỉ ra loại tệp được liên kết đến. Có các tùy chọn để xác định cách xử lý đó, vì vậy bạn có thể chọn.


Từ man find:

    -type c
           File is of type c:

           b      block (buffered) special

           c      character (unbuffered) special

           d      directory

           p      named pipe (FIFO)

           f      regular file

           l      symbolic link; this is never true if the  -L  option
                  or  the -follow option is in effect, unless the sym‐
                  bolic link is broken.  If you  want  to  search  for
                  symbolic links when -L is in effect, use -xtype.

           s      socket

           D      door (Solaris)

và liên quan đến việc xử lý các liên kết tượng trưng:

    -xtype c
           The  same as -type unless the file is a symbolic link.  For
           symbolic links: if the -H or -P option was specified,  true
           if the file is a link to a file of type c; if the -L option
           has been given, true if c is `l'.  In other words, for sym‐
           bolic  links, -xtype checks the type of the file that -type
           does not check.

    -P     Never follow symbolic links.  This is  the  default  behav‐
           iour.  When find examines or prints information a file, and
           the file is a symbolic link, the information used shall  be
           taken from the properties of the symbolic link itself.


    -L     Follow symbolic links.  When find examines or prints infor‐
           mation about files, the information  used  shall  be  taken
           from  the  properties of the file to which the link points,
           not from the link itself (unless it is  a  broken  symbolic
           link  or  find  is  unable to examine the file to which the
           link points).  Use of this option implies -noleaf.  If  you
           later  use  the -P option, -noleaf will still be in effect.
           If -L is in effect and find discovers a symbolic link to  a
           subdirectory during its search, the subdirectory pointed to
           by the symbolic link will be searched.

           When the -L option is in effect, the -type  predicate  will
           always  match  against the type of the file that a symbolic
           link points to rather than the link itself (unless the sym‐
           bolic  link  is  broken).   Using  -L causes the -lname and
           -ilname predicates always to return false.


    -H     Do not follow symbolic links, except while  processing  the
           command  line  arguments. [...]

2

Nếu bạn quan tâm nhất về việc sắp xếp các thư mục từ các loại tệp khác, bạn có thể đi với

ls --group-directories-first

mặt khác, tôi nghĩ rằng bạn phải chuyển đầu ra từ ls -l thông qua sắp xếp hoặc thông qua grep như được trả lời bởi Anthon


2
ls -l | awk '/^d/{print $NF}

awk sẽ bắt tất cả những gì bắt đầu với d. vì d là cho thư mục và bạn cần in trường cuối cùng để liệt kê tên thư mục


1
ls -l | sort 

Điều này sẽ sắp xếp kết quả theo thứ tự chữ cái của từng kết quả. Nếu ký tự đầu tiên là tiêu chí bạn muốn, thì đó chính là nó. Nếu bạn chỉ cần tên tệp, bạn có thể thử:

ls -l | sort | cut -f 2 -d ' ' 

Hoặc một cái gì đó tương tự (lệnh đó sắp xếp và sau đó phân tách từng dòng bằng cách sử dụng dấu phân cách không gian, sau đó trả về nhóm thứ hai.


cảm ơn vì đã chỉnh sửa Tico, thật khó để xem bạn gõ gì trên điện thoại.
Fabio
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.