Dies findet alle Dateien (keine Symlinks) mit dem gesetzten ausführbaren Bit:
find .-perm +111-type f
Hier finden Sie auch Symlinks (die oft gleich wichtig sind)
find .-perm +111-type f -or-type l
So funktioniert der Befehl, wenn er nicht offensichtlich ist:
find ist natürlich das find programm (:
.verweist auf das Verzeichnis, in dem gesucht werden soll ( .= aktuelles Verzeichnis)
-perm +111= wenn eines der ausführbaren Bits gesetzt ist ( +bedeutet "eines dieser Bits", 111ist das Oktal für das ausführbare Bit von Eigentümer, Gruppe und irgendjemandem)
-type fbedeutet, dass der Typ eine Datei ist
-or Boolesches ODER
-type lbedeutet, dass der Typ eine symbolische Verknüpfung ist
Sie können -Lanstelle von -or -type lveranlassen, dass statAufrufe von finddie Statistiken der verknüpften Datei zurückgeben, nicht die Verknüpfung selbst.
Ian C.
Das Problem, das ich bei diesem Ansatz festgestellt habe, ist, dass jede Datei über die Ausführungsberechtigung verfügen kann. Nachdem Sie beispielsweise eine Textdatei von Windows heruntergeladen haben, ist die Berechtigung ungültig.
Ivan Z. Xiao
4
Ich konnte Ians Antwort nicht zum Laufen bringen (10.6.8), aber das Folgende ergab die erwarteten Ergebnisse:
find .-type f -perm +0111-print
Update bearbeiten
Das scheint auch zu funktionieren!
find .-type f -perm +ugo+x -print
Ich denke, das "x" ist ohne den Benutzer / die Gruppe / andere Spezifizierer bedeutungslos.
Die symbolische Syntax muss neu sein - danke, dass Sie darauf hingewiesen haben. Ich habe meine Antwort so aktualisiert, dass sie Oktale verwendet und mit älteren OS X-Versionen abwärtskompatibel ist.
Ian C.
Seltsamerweise ist dieser Abschnitt der 10.6-Hilfeseite genau derselbe wie der, den Sie zitiert haben ... das war genug, um mich ein bisschen tiefer gehen zu lassen und zu sehen, was zum Teufel los war. Habe meine Antwort oben geändert.
-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 (``-'').
Also brauchst du:
find .-type f -perm +0111-print
Denken Sie daran, dass OS X BSD-basiert und nicht Linux-basiert ist. Daher sind die Gnu-Befehle, die Sie in Linux-Distributionen (von denen eine findist) gewohnt sind, nicht unbedingt dieselben wie in OS X. Dies ist nicht der Fall Ein Shell-Unterschied, es ist ein Unterschied zwischen dem Betriebssystem und den Utility-Tools des Betriebssystems.
Ich bin mir einer sehr alten Frage bewusst, aber auf der Suche nach einer Lösung habe ich vielleicht eine bessere Antwort gefunden.
Das Hauptproblem bei der Verwendung von "find" besteht darin, dass ein Attribut als ausführbar festgelegt wird, auch wenn dieses Attribut für eine nicht ausführbare Datei festgelegt ist.
Im Lieferumfang von MacOS ist ein kleines Befehlszeilentool " file" enthalten, mit dem Dateiinformationen angezeigt werden, beispielsweise:
$> 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
Wie Sie sehen können, ist 'MyProgram' eine ausführbare Datei und wird als solche angezeigt. Da alte ausführbare 32-Bit-Dateien auch den Ausdruck "ausführbar" enthalten, sollten im Folgenden alle ausführbaren Dateien (Binärdateien) aufgeführt sein:
file *| grep "executable"
Hoffe, dass dies auch für jemanden nützlich ist, der nach einer Antwort auf dieselbe Frage sucht.
Hinweis: fileScheint keine Funktion zu haben, um durch Unterverzeichnisse zu rekursieren.
-L
anstelle von-or -type l
veranlassen, dassstat
Aufrufe vonfind
die Statistiken der verknüpften Datei zurückgeben, nicht die Verknüpfung selbst.Ich konnte Ians Antwort nicht zum Laufen bringen (10.6.8), aber das Folgende ergab die erwarteten Ergebnisse:
Update bearbeiten
Das scheint auch zu funktionieren!
Ich denke, das "x" ist ohne den Benutzer / die Gruppe / andere Spezifizierer bedeutungslos.
quelle
Von der Manpage für find in OS X :
Also brauchst du:
Denken Sie daran, dass OS X BSD-basiert und nicht Linux-basiert ist. Daher sind die Gnu-Befehle, die Sie in Linux-Distributionen (von denen eine
find
ist) gewohnt sind, nicht unbedingt dieselben wie in OS X. Dies ist nicht der Fall Ein Shell-Unterschied, es ist ein Unterschied zwischen dem Betriebssystem und den Utility-Tools des Betriebssystems.quelle
Ich bin mir einer sehr alten Frage bewusst, aber auf der Suche nach einer Lösung habe ich vielleicht eine bessere Antwort gefunden.
Das Hauptproblem bei der Verwendung von "find" besteht darin, dass ein Attribut als ausführbar festgelegt wird, auch wenn dieses Attribut für eine nicht ausführbare Datei festgelegt ist.
Im Lieferumfang von MacOS ist ein kleines Befehlszeilentool "
file
" enthalten, mit dem Dateiinformationen angezeigt werden, beispielsweise:Wie Sie sehen können, ist 'MyProgram' eine ausführbare Datei und wird als solche angezeigt. Da alte ausführbare 32-Bit-Dateien auch den Ausdruck "ausführbar" enthalten, sollten im Folgenden alle ausführbaren Dateien (Binärdateien) aufgeführt sein:
Hoffe, dass dies auch für jemanden nützlich ist, der nach einer Antwort auf dieselbe Frage sucht.
Hinweis:
file
Scheint keine Funktion zu haben, um durch Unterverzeichnisse zu rekursieren.quelle