Wenn ich einen find
Befehl wie diesen verwende:
find /mydir/mysubdir -executable -type f
Alle ausführbaren Dateien werden aufgelistet (ausgenommen Verzeichnisse), einschließlich der ausführbaren Skriptdatei (wie script.sh usw.). Ich möchte nur ausführbare Binärdateien auflisten.
Antworten:
Sie könnten das
file
Dienstprogramm versuchen . Laut der Manpage:Möglicherweise müssen Sie mit dem regulären Ausdruck herumspielen, aber so etwas wie:
Da die Datei viele Optionen enthält, sollten Sie sich die Manpage genauer ansehen. Ich habe die erste Option verwendet, die ich gefunden habe und die scheinbar einfach zu grep ist.
quelle
find -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print
. Es gibt Ihnen nur Dateien (und kann daher an den nächsten Befehl übergeben werden, den er ausführen möchte)find
mitbrew install findutils
oder installierensudo port install findutils
und dann einen Aufruf wie diesen ausführen, der einen ähnlichen Effekt hat:gfind . -type f -executable -exec file '{}' \; | grep -i execut
Hier ist eine Möglichkeit zum Ausschließen von Skripten, dh Dateien, deren erste beiden Zeichen sind
#!
:Bei einigen Arten von Dateien ist nicht klar, ob sie als Skripte oder als Binärdateien klassifiziert werden sollen, z. B. Bytecode-Dateien. Je nachdem, wie die Dinge eingerichtet sind, können diese mit beginnen oder auch nicht
#!
. Wenn dies für Sie von Bedeutung ist, müssen Sie das innere Shell-Skript komplexer gestalten. Im Folgenden sehen Sie beispielsweise, wie Sie ELF-Binärdateien und ausführbare Mono-Dateien und Objective Caml-Bytecode-Programme, jedoch keine anderen Arten von ausführbaren Dateien wie Shell- oder Perl-Skripts oder JVM-Bytecode-Programme einschließen können:quelle
Nur für den Fall, dass Sie sich auf einem System mit einem Downlevel befinden
find
(es gibt immer noch, wie ich schreibe, eine Menge Wissenschaftscluster, auf denen RHEL5 ausgeführt wird!), Ohne die Rechte zum Aktualisieren: stattIn den obigen ausgezeichneten Antworten können Sie z.
die auf Berechtigungsbits sucht. Leider findet das obige nur Dateien, für die der Benutzer eine ausführbare Datei hat, aber das funktioniert normalerweise bei mir.
quelle