tìm lệnh sắp xếp mặc định


30

Thứ tự sắp xếp mặc định cho các mục được trả về bởi lệnh find linux là gì?

Ví dụ: nếu tôi phát hành

find . -type f -name '*mp3' 

và đầu ra bao gồm nhiều tệp trên nhiều thư mục con, thứ tự mặc định trong thư mục nào được liệt kê? Đồng thời, thứ tự sắp xếp trong đó các tệp trong một thư mục riêng lẻ được liệt kê là gì?

Đôi khi nó trả về:

./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3

Xem cách đầu tiên nội dung của thư mục B được liệt kê, sau đó là thư mục A. Đồng thời trong thư mục A, các tệp được liệt kê theo thứ tự vui nhộn.


Từ kinh nghiệm có vẻ là nhất quán cho mỗi cài đặt, tức là. nếu bạn có cùng một tập tin trên hai máy thì nó sẽ luôn trả về một đơn hàng trên một máy và một tập tin hoàn toàn khác trên máy kia. Tôi đã tự hỏi tại sao trước đây, +1
James L

1
Tôi có một máy phát FM trong xe và nó luôn phát các bài hát từ thẻ flash của tôi theo thứ tự lạ. Tôi chưa bao giờ tìm ra nó, nhưng tôi nhận ra nó chính xác theo thứ tự mà lệnh trên trả về đầu ra của nó
Nasko

BTW: BSD find có -stham số cho đầu ra sắp xếp theo thứ tự abc.
lapo

Câu trả lời:


19

findsẽ duyệt qua cây thư mục trong các mục thứ tự được lưu trữ trong các mục thư mục. Điều này (hầu hết) sẽ nhất quán từ chạy đến chạy, trên cùng một máy và về cơ bản sẽ là "thứ tự tạo tệp / thư mục" nếu không có xóa.

Tuy nhiên, một số hệ thống tệp sẽ sắp xếp lại các mục nhập thư mục như là một phần của hoạt động nén hoặc khi kích thước của mục nhập cần được mở rộng, do đó, luôn có một cơ hội nhỏ thứ tự "thô" sẽ thay đổi theo thời gian. Nếu bạn muốn một thứ tự nhất quán, hãy cung cấp đầu ra thông qua một giai đoạn sắp xếp bổ sung.


Cảm ơn câu trả lời chi tiết của bạn! Vì vậy, nếu máy phát FM của tôi (xem bình luận phổ biến của tôi) phát các bản nhạc theo thứ tự lệnh find sẽ liệt kê chúng, tôi không thể kiểm soát theo thứ tự tôi muốn chơi.
Nasko

Chà, thẻ flash có thể sử dụng hệ thống tệp FAT và nếu tôi nhớ chính xác, việc thao tác thứ tự các mục nhập FAT khá dễ dàng với trình gỡ lỗi hệ thống tệp. Có thể, có thể, đáng để sao chép các bài hát từ đèn flash hiện tại sang đèn flash mới, theo thứ tự bạn muốn chúng phát, có thể dễ dàng hơn.
Vatine

Một trong những ứng dụng hữu ích của tính nhất quán như vậy là ước tính tiến độ chậm find /path/ -exec ...với việc chạy nhanh hơn nhiều find /path/để có được danh sách các tệp được sắp xếp trước.
Andrey


2

Tôi đã làm việc trong UNIX / Linux tương ứng từ năm 1984/1991 và lệnh đầu tiên tôi được dạy là tìm. Linux / GNU đã đưa khá nhiều thứ bạn cần vào lệnh find hiện tại, vì vậy hãy chơi xung quanh nó.

Dưới đây là một số lời khuyên hữu ích để sắp xếp tìm đầu ra. Tùy chọn -printf cung cấp cho bạn rất nhiều tùy chọn để cho phép trình bày thông tin tệp và sắp xếp phức tạp hơn. Nó là tốt nhất cho các vấn đề như thế này. Chơi với nó để xem những gì sẽ làm việc cho bạn. Sử dụng -printf bạn có thể tùy chỉnh và phân định kết quả theo cách bạn muốn. Điều này giúp khá nhiều khi bạn cần đăng quá trình kết quả. Tôi hi vọng điêu nay se giup được ai đo.

  1. Nếu bạn sử dụng -ls và muốn sắp xếp theo tên tệp, trường thứ 11 là tên tệp để bạn có thể thực hiện các thao tác sau. Tùy chọn sort -k cũng có thể mất nhiều trường để sắp xếp.

    tìm / đường dẫn -ls | sắp xếp -k11

  2. Nếu bạn muốn kiểm soát hạt tốt hơn iesort theo ngày / giờ theo thứ tự tăng dần hoặc giảm dần, hãy sử dụng tùy chọn -printf "". Xem hướng dẫn để biết thêm chi tiết, nhưng sau đây là một ví dụ sẽ in với giây phân số nên rất chính xác.

VÍ DỤ NGÀY / THỜI GIAN: 2016-09-17 + 12: 09: 57.9013929800

find /path -printf "%T+ %p\n" | sort -n # Ascending

find /path -printf "%T+ %p\n" | sort -nr # Descending

Một cách khác để làm điều này mà không có ký tự trong chuỗi ngày / thời gian là.

VÍ DỤ NGÀY / THỜI GIAN: 20160917120013.8101685040

find /path -printf "%AY%Am%Ad%AH%AM%AS %p\n" | sort -n
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.