Unter Linux.
Ich weiß, dass ich das kann find . -type f
, aber das schließt Binärdateien ein und ich konnte keine Möglichkeit finden, sie mit find auszuschließen.
Antwort1
file /usr/bin/file
enthält beispielsweise in der Ausgabe auf meinem System nicht das Wort „binary“. Wenn file -i
verfügbar, enthält es das Wort „binary“. Ohne -i
ist es möglicherweise zuverlässiger, auf das Vorhandensein des Wortes „text“ zu testen.
find -type f -exec sh -c "file {} | grep text >/dev/null" \; -print
oder
find -type f -exec sh -c "file {} | grep text >/dev/null" \; -ls
Verwendung von -i
:
find -type f -exec sh -c "file -i {} | grep -v binary >/dev/null" \; -print
Die Verwendung von file
ist nur eine Annäherung, da zur Bestimmung des Dateityps Heuristiken verwendet werden und es keine feste Definition dafür gibt, was eine „binäre“ Datei ausmacht. Ist eine leere Datei „binär“? file
sagt, dass es so ist. Außerdem gibt es viele (normalerweise ungewöhnliche) Möglichkeiten, falsche positive IDs durch auszulösen file
.
Antwort2
Eine andere Möglichkeit besteht darin, alle Dateien auszuschließen, für die eine Ausführungsberechtigung für einen Benutzer, eine Gruppe oder andere festgelegt ist:
find . -type f ! -perm /u=x,g=x,o=x
(Wenn Binär gleich Ausführungsberechtigungen ist …)
Antwort3
alle Dateien ohne Ausführungsberechtigungen anzeigen (obwohl dies nicht speziell binär ist und daher möglicherweise nicht genau das, was Sie benötigen):
ls -l | awk '{if ($1 !~ /x/) print $8}'
Antwort4
Versuchen Sie den folgenden Befehl:
find . -type f -exec file "{}" \; | grep -vE "ELF|archive"