Im Folgenden werden alle Textdateien im aktuellen Verzeichnis aufgelistet.
file --mime-type * -F$'\t' | awk -F'\t *' '$2 ~/^text\/plain/ { print $1 }'
Hinweis: Dies setzt voraus, dass Ihre Dateinamen haben weder eingebettete Registerkarten noch eingebettet Zeilenumbrüche, die normalerweise nicht ein Problem ist.
file --mime-type * -F$'\t'
bestimmt den Dateityp einer jede Datei in dem aktuellen Ordner (*
) und druckt eine zweispaltige Liste: die Dateinamen auf der Hand, durch eine Lasche, gefolgt (-F'$\t'
), durch Zwischenräume für die Ausrichtung gefolgt, gefolgt vom Dateityp, der als MIME-Typ ausgedrückt wird.
awk -F'\t *' '$2 ~/^text\/plain/ { print $1 }'
dann jede Zeile in den Typ Dateinamen und MIME parst (-F'\t *
), prüft, ob der MIME-Typ (Feld 2, $2
) beginnt mit (^
) string text/plain
, und wenn ja, druckt der Dateiname (Feld 1, $1
).
Um die resultierenden Dateien in einer Schleife zu verarbeiten, verwenden while
:
while IFS= read -r textfile; do
# Work with "$textfile"
done < <(file --mime-type * -F$'\t' | awk -F'\t *' '$2 ~/^text\/plain/ { print $1 }')
Beachten Sie, dass, während Sie konnte Anruf file
in einem bedingten innerhalb einer for file in *
Schleife, der obige Ansatz ist viel effizienter.
Für die Aufzeichnung hier, wie Sie den Befehl in einem bedingten verwenden würden:
if [[ $(file -b --mime-type "$file") == 'text/plain'* ]]; then ...
Sehen http://mywiki.wooledge.org/ParsingLs - Sie nicht 'ls' in Skripten verwenden sollten; Globbing ist sowohl effizienter (keine Programme außerhalb der Shell erforderlich, während '/ bin/ls' eine separate ausführbare Datei ist) und korrekter (siehe Link). –
... Die Antwort von @ mklement0 enthält eine Verzweigung mit Kompromissen, die für die Leistung über die Korrektheit gemacht wurden, aber zumindest ist es eine bewusste Entscheidung, und Sie erhalten etwas als Gegenleistung. (Persönlich würde ich diese Wahl nicht treffen - das Erstellen einer PDF ist so teuer, dass die Kosten für den Aufruf von "Datei" auf Kandidaten fast als Prozentsatz der Gesamtkosten verschwinden, es sei denn, Sie machen etwas Ineffektives wie das Ausführen über alle Dateien hinweg , im Gegensatz zu nur neuen, auf einer regulären/gestaffelten Basis). –