Tùy chọn đầu tiên trong tiện ích `find 'của Linux?


12

Có bất kỳ tùy chọn đầu tiên / chiều sâu đầu tiên trong tiện ích `find 'của Linux không?

Câu trả lời:


5

Không có gì tích hợp để tìm, ngay cả GNU cũng tìm thấy. Bạn có thể xử lý hậu kỳ đầu ra findđể sắp xếp theo số lượng dấu gạch chéo, ví dụ như với Perl:

find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
  • <> là danh sách của tất cả các dòng đầu vào;
  • $a =~ s!/!/!glà số lượng dấu gạch chéo $a, mà chúng tôi sử dụng làm tiêu chí sắp xếp.

Nếu bạn có thể sử dụng zsh:

echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
  • **/* liệt kê tất cả các tệp trong thư mục hiện tại và thư mục con.
  • Những thứ bên trong dấu ngoặc đơn là vòng loại toàn cầu.
  • Vòng loại toàn cầu oekiểm soát thứ tự trả về các trận đấu: chúng được sắp xếp theo giá trị REPLYsau khi chạy mã ở đây trong dấu ngoặc kép cho mỗi trận đấu REPLYđược đặt ban đầu thành đường dẫn khớp.
  • Mã đã nói biến đổi $REPLYđể xóa tất cả mọi thứ trừ dấu gạch chéo. Vì vậy, kết quả bao gồm mọi thứ ở độ sâu 1 (kết quả trống $REPLY), sau đó mọi thứ ở độ sâu 2 ( $REPLYkết thúc là /), độ sâu 3 ( //), v.v.

1
Quá trình đăng bài sắp xếp rất thú vị, tuy nhiên, sắp xếp cần tìm hoàn thành và bạn sẽ không có cơ hội kiểm soát nghỉ.
Xiè Jìléi


1

Cảm giác của tôi là bạn có thể. Nó liên quan đến grep và như vậy và một vòng lặp, nhưng tôi thấy nó hoạt động rất tốt, đặc biệt cho trường hợp của bạn về việc tìm kiếm không cần phải hoàn thành.

Nó đòi hỏi nhiều tài nguyên hơn vì:

  • Rất nhiều
  • Rất nhiều phát hiện
  • Mỗi thư mục trước độ sâu hiện tại bị tấn công bằng cách tìm nhiều lần vì có tổng độ sâu cho cấu trúc tệp (điều này không phải là vấn đề nếu bạn thực tế có bất kỳ lượng ram nào ...)

Điều này là tốt bởi vì:

  • Nó sử dụng bash và các công cụ gnu cơ bản
  • Nó có thể bị phá vỡ bất cứ khi nào bạn muốn (như bạn thấy những gì bạn đang tìm kiếm bay qua)
  • Nó hoạt động trên mỗi dòng và không phải mỗi lần tìm, vì vậy các lệnh tiếp theo không phải chờ tìm và sắp xếp
  • Nó hoạt động dựa trên sự phân tách hệ thống tập tin thực tế, vì vậy nếu bạn có một thư mục có dấu gạch chéo trong đó, nó sẽ không được liệt kê sâu hơn nó; nếu bạn có một dấu phân cách đường dẫn khác được cấu hình, bạn vẫn ổn.
#! / bin / bash 
độ sâu = 0

trong khi tìm -mindepth $ sâu -maxdepth $ sâu | grep '.'
làm
    độ sâu = $ ((độ sâu + 1))
làm xong

Bạn cũng có thể dễ dàng đặt nó vào một dòng một cách dễ dàng (?):

depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done

Nhưng tôi thích các tập lệnh nhỏ hơn gõ ...

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.