Znajduje to wszystkie pliki (nie dowiązania symboliczne) z zestawem bitów wykonywalnych:
find .-perm +111-type f
Znajdziesz tu również dowiązania symboliczne (które są często równie ważne)
find .-perm +111-type f -or-type l
Oto jak działa polecenie, jeśli nie jest oczywiste:
find jest oczywiście program znajdujący (:
.odnosi się do katalogu, w którym rozpocznie się wyszukiwanie (( .bieżący katalog)
-perm +111= z dowolnym zestawem bitów wykonywalnych ( +oznacza „dowolny z tych bitów”, 111jest ósemką dla bitu wykonywalnego dla właściciela, grupy i kogokolwiek)
-type foznacza, że typ jest plikiem
-or boolean OR
-type loznacza, że typ jest dowiązaniem symbolicznym
Można użyć -Lzamiast -or -type lpowodować żadnych statpołączeń wykonanych przez findzwrócić statystyk pliku związana, a nie sam związek.
Ian C.
Problem, który znalazłem w tym podejściu, polega na tym, że każdy plik może mieć uprawnienia do uruchamiania. Na przykład po pobraniu pliku tekstowego z systemu Windows uprawnienia są pomieszane.
Ivan Z. Xiao
5
Nie mogłem sprawić, by odpowiedź Iana zadziałała (10.6.8), ale następujące wyniki dały oczekiwane rezultaty:
find .-type f -perm +0111-print
edytuj aktualizację
To też wydaje się działać!
find .-type f -perm +ugo+x -print
Myślę, że „x” nie ma znaczenia bez użytkownika / grupy / innych specyfikatorów.
Składnia symboliczna musi być nowa - dziękuję za zwrócenie na to uwagi. Zaktualizowałem odpowiedź, więc używa ósemek i jest wstecznie kompatybilny ze starszymi wersjami OS X.
Ian C.
Co dziwne, ta część strony podręcznika 10.6 jest dokładnie taka sama, jak to, co zacytowałeś ... co wystarczyło, abym zaczął kopać trochę głębiej i zobaczyć, co się do cholery dzieje. Zmieniłem moją odpowiedź powyżej.
-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 trueif at least all of
the bits in the mode are setin 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 trueif 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 (``-'').
Potrzebujesz więc:
find .-type f -perm +0111-print
Pamiętaj, że OS X jest oparty na BSD , a nie na Linuksie, więc polecenia Gnu, do których przywykłeś w dystrybucjach Linuksa (z których findjest jedną z nich), niekoniecznie są takie same jak w OS X. To nie jest różnica powłoki, to różnica w systemie operacyjnym / narzędziach systemu operacyjnego.
Wiem, że to bardzo stare pytanie, ale szukając rozwiązania, mogłem znaleźć lepszą odpowiedź.
Główny problem z użyciem „znajdź” polega na tym, że polega on na zestawie atrybutów wykonywalnym, nawet jeśli ten atrybut jest ustawiony dla pliku niewykonywalnego.
MacOS jest wyposażony w poręczne małe narzędzie wiersza polecenia „ file”, które wyświetla informacje o pliku, na przykład:
$> file *Distribution: directory
SomeFile.icns:Mac OS X icon,3272878 bytes,"ic09" type
MyPicture.png: PNG image data,1024 x 1024,8-bit/color RGBA, non-interlaced
NSHelpers.pas:Algol68 source text, ASCII text
myProgram:Mach-O 64-bit executable x86_64
Jak widać, „MyProgram” jest plikiem wykonywalnym i jako taki jest ładnie oznaczony. Ponieważ stare 32-bitowe pliki wykonywalne również będą miały w tym wyrażeniu „plik wykonywalny”, poniższe elementy powinny zawierać wszystkie prawdziwe pliki wykonywalne (pliki binarne):
file *| grep "executable"
Mam nadzieję, że przyda się to również osobom szukającym odpowiedzi na to samo pytanie.
Uwaga: filewydaje się, że nie ma funkcji rekurencji w podkatalogach.
-L
zamiast-or -type l
powodować żadnychstat
połączeń wykonanych przezfind
zwrócić statystyk pliku związana, a nie sam związek.Nie mogłem sprawić, by odpowiedź Iana zadziałała (10.6.8), ale następujące wyniki dały oczekiwane rezultaty:
edytuj aktualizację
To też wydaje się działać!
Myślę, że „x” nie ma znaczenia bez użytkownika / grupy / innych specyfikatorów.
źródło
Ze strony podręcznika użytkownika w OS X :
Potrzebujesz więc:
Pamiętaj, że OS X jest oparty na BSD , a nie na Linuksie, więc polecenia Gnu, do których przywykłeś w dystrybucjach Linuksa (z których
find
jest jedną z nich), niekoniecznie są takie same jak w OS X. To nie jest różnica powłoki, to różnica w systemie operacyjnym / narzędziach systemu operacyjnego.źródło
Wiem, że to bardzo stare pytanie, ale szukając rozwiązania, mogłem znaleźć lepszą odpowiedź.
Główny problem z użyciem „znajdź” polega na tym, że polega on na zestawie atrybutów wykonywalnym, nawet jeśli ten atrybut jest ustawiony dla pliku niewykonywalnego.
MacOS jest wyposażony w poręczne małe narzędzie wiersza polecenia „
file
”, które wyświetla informacje o pliku, na przykład:Jak widać, „MyProgram” jest plikiem wykonywalnym i jako taki jest ładnie oznaczony. Ponieważ stare 32-bitowe pliki wykonywalne również będą miały w tym wyrażeniu „plik wykonywalny”, poniższe elementy powinny zawierać wszystkie prawdziwe pliki wykonywalne (pliki binarne):
Mam nadzieję, że przyda się to również osobom szukającym odpowiedzi na to samo pytanie.
Uwaga:
file
wydaje się, że nie ma funkcji rekurencji w podkatalogach.źródło