2017-03-14 3 views
0

Okay, was ich versuche zu tun, gibt es ein Dienstprogramm namens "Datei" in bash und ich möchte es alle Dateien im aktuellen Verzeichnis und in allen Unterverzeichnissen als Argument übergeben. Das Beste, was wäre, wenn ich es Liste von Dateien aus „finden“Argument des Utility "Datei" in Bash

find -type f | file * -b 

aber die „Datei“ funktioniert nicht wie das passieren konnte, braucht es ein Argument wie dieses

file /argument/ -b 

Ich war auch versuchen, einige Regex zu verwenden, aber es funktioniert auch nicht.

+0

versuchen Eigentlich sollte die '-b' gehen ** vor ** die Namen. Siehe [POSIX-Hilfssyntax-Richtlinien] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html) Nummer 9: "Alle Optionen sollten Operanden in der Befehlszeile vorangehen". –

Antwort

3

konnte

find . -type f -exec file -b {} + 
+0

Keine Notwendigkeit für den Backslash vor dem '+'; das wird nur für das '' 'Formular benötigt. –

+0

@CharlesDuffy ah ja. Meine Finger haben eine schlechte Angewohnheit. :) danke. – jm666

1

so etwas wie dies sollte

find . -type f -print0 | xargs -0 -n1 file -b 

arbeiten hier erste find findet die Dateien von Interesse, stellt sicher, dass ihre Namen mit Null-Byte begrenzt sind und übergibt diese Liste xargs die dann file auf Brocken Größe ruft 1, dh auf jede Datei separat ...

Aber im Prinzip file kann mehrere Eingabeargumente gleichzeitig behandeln, so dass man die Größe der Chunks erhöhen könnte, um die Gesamtanzahl der Ausführungen dieses Dienstprogramms zu verringern.

Auch Sie könnten file zwingen, seine Eingabe von der Standardeingabe zu lesen wie folgt:

find . -type f | file -f- -b 

Die -f Option, um die Datei, aus der angibt file die Dateien geladen werden soll - dann Anfragen identifiziert, wird Standard zu verwenden, Eingang.

+0

'-print0 | xargs -0' ist, in neueren Implementierungen von 'find', besser durch' -exec ... {} + '- zu ersetzen, die, wie'xargs', Argumente in so wenige Aufrufe wie möglich gruppiert, dies aber ohne erfordert Nicht-POSIX-Erweiterungen. ('find -exec ... {} +' wurde seit 2006 POSIX-spezifiziert, während 'xargs -0' immer noch nicht Teil des Standards ist. –

+0

... mich selbst korrigieren: Das war POSIX-Ausgabe 6, also ist '-exec ... {} +' seit 2004 gültig. –