Listet/findet alle regulären Dateien in allen Unterverzeichnissen außer Binärdateien

Listet/findet alle regulären Dateien in allen Unterverzeichnissen außer Binärdateien

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/fileenthält beispielsweise in der Ausgabe auf meinem System nicht das Wort „binary“. Wenn file -iverfügbar, enthält es das Wort „binary“. Ohne -iist 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 fileist 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“? filesagt, 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"

verwandte Informationen