Tìm tất cả các tập tin thực thi trong một thư mục trong thiết bị đầu cuối


13

Tôi có một thư mục myfolderchứa một hệ thống phân cấp lớn các tệp / thư mục.
Làm thế nào để tìm tất cả các tập tin thực thi trong thư mục này?

Trên Ubuntu, nó hoạt động: find . -executable -type f

Nhưng Mac OS X Mavericks (cũng sử dụng bash) không tải được:

find: -executable: unknown primary or operator

Câu trả lời:


21

Điều này sẽ tìm thấy tất cả các tệp (không phải liên kết tượng trưng) với tập bit thực thi:

find . -perm +111 -type f

Điều này cũng sẽ tìm thấy các liên kết tượng trưng (thường không kém phần quan trọng)

find . -perm +111 -type f -or -type l

Đây là cách lệnh hoạt động nếu nó không rõ ràng:

  • find rõ ràng là chương trình tìm kiếm (:
  • .tham chiếu đến thư mục để bắt đầu tìm trong ( .= thư mục hiện tại)
  • -perm +111= với bất kỳ bit thực thi nào được đặt ( +có nghĩa là "bất kỳ bit nào trong số này", 111là số bát phân cho bit thực thi trên chủ sở hữu, nhóm và bất kỳ ai)
  • -type fcó nghĩa là loại là một tập tin
  • -or boolean HOẶC
  • -type lcó nghĩa là loại là một liên kết tượng trưng

2
Bạn có thể sử dụng -Lthay vì -or -type lgây ra bất kỳ statcuộc gọi nào được thực hiện bằng cách findtrả về số liệu thống kê của tệp được liên kết đến, chứ không phải chính liên kết.
Ian C.

Vấn đề tôi tìm thấy với cách tiếp cận này là bất kỳ tệp nào cũng có thể có quyền chạy. Ví dụ: sau khi bạn tải xuống một số tệp văn bản từ Windows, quyền sẽ bị rối.
Ivan Z. Xiao

4

Tôi không thể làm cho câu trả lời của Ian hoạt động (10.6.8), nhưng, những điều sau đây đã cho kết quả như mong đợi:

find . -type f -perm +0111 -print

chỉnh sửa cập nhật

Điều này dường như cũng làm việc!

find . -type f -perm +ugo+x -print

Tôi đoán "x" là vô nghĩa nếu không có người dùng / nhóm / người xác định khác.


Cú pháp tượng trưng phải mới - cảm ơn vì đã chỉ ra điều đó. Tôi đã cập nhật câu trả lời của mình để nó sử dụng quãng tám và tương thích ngược với các phiên bản OS X cũ hơn.
Ian C.

Thật kỳ lạ, phần đó của trang 10.6 hoàn toàn giống với những gì bạn đã trích dẫn .... nó đủ để khiến tôi đào sâu hơn một chút và xem cái quái gì đang diễn ra. Sửa đổi phản ứng của tôi ở trên.
Kent

2
Kết luận: Cú pháp lệnh BDS là lạ.
Ian C.

3

Từ trang man để tìm trong OS X :

 -perm [-|+]mode
         The mode may be either symbolic (see chmod(1)) or an octal number.  If the mode is symbolic, a
         starting value of zero is assumed and the mode sets or clears permissions without regard to the
         process' file mode creation mask.  If the mode is octal, only bits 07777 (S_ISUID | S_ISGID |
         S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO) of the file's mode bits participate in the comparison.
         If the mode is preceded by a dash (``-''), this primary evaluates to true if at least all of
         the bits in the mode are set in the file's mode bits.  If the mode is preceded by a plus
         (``+''), this primary evaluates to true if any of the bits in the mode are set in the file's
         mode bits.  Otherwise, this primary evaluates to true if the bits in the mode exactly match the
         file's mode bits.  Note, the first character of a symbolic mode may not be a dash (``-'').

Vì vậy bạn cần:

find . -type f -perm +0111 -print

Hãy nhớ rằng OS X dựa trên BSD , không dựa trên Linux, vì vậy các lệnh Gnu mà bạn đã sử dụng trong các bản phân phối Linux (trong đó findlà một trong số chúng) không nhất thiết giống như trong OS X. Đây không phải là một sự khác biệt về vỏ, đó là sự khác biệt của các hệ điều hành / hệ điều hành tiện ích.

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.