$ file Test.txt
Test.txt: ISO-8859 text, with CRLF line terminators
$ file Test2.txt
Test2.txt: UTF-8 Unicode English text, with very long lines
ls *.txt
find . -name "*.txt"
intergo schrieb:Hallo bin erneut am Fragen, wollte wissen, wie soll man mit file überprüfen, ob die Datei eine Textdatei ist?
Genauer gesagt, soll ich überpüfen ob es eine Textdatei ist d.h. auf endung der Datei.
Danke
file * | awk -F":" '$2~"text"{print $1}'
file -iN * | awk -F":" '$2 ~ "text/x-c" {print $1}'
if file -N DATEI | cut -d: -f2 | grep "text" >/dev/null ; then echo "ist text"; else echo "kein text"; fi
Dann nimm mein letztes Beispiel und füge dort ein paar kleine Änderungen ein.intergo schrieb:Falls es eine ist, sollen die zeilen in dieser Datei gezählt werden.
#! /bin/bash
#set -x
#realisiert wc Befehl
datzahler=0
while true
do
echo " 1 für Anzahl der Zeichen "
echo " 2 für ANzahl der Woerter "
echo " 3 für Anzahl der Zeilen "
echo -n " Was soll gezaehlt werden "
read antwort
case $antwort in
1) echo "Welche datei soll gezeahlt werden"
echo "Bitte Datei eingeben"
read name1
file $name1
if ( test find . -name "*.txt" )
then
zeichen=`cat $name1 | wc -c`
echo "Die Anzahl der Zeichen in Datei $name1 betreagt :$zeichen"
else
echo "Ist keine Textdatei"
let datzahler=$datzahler+1
echo "Es wurden $datzahler Dateien gezeahlt"
exit
fi;;
2) echo "Welche Datei soll gezeahlt werden?"
echo "Bitte Datei eingeben"
read name2
file $name2
if [ -f $name2 ]
then
woerter=`cat $name | wc -w`
echo "Die Anzahl der Woerter betreagt : $woerter"
else
echo "Es ist keine Textdatei"
let datzahler=$datzahler+1
echo "Es wurden $datzahler Dateien gezeahlt"
fi;;
3) echo "Welche Datei soll gezeahlt werden?"
echo "Bitte eingeben"
read name3
file -i $name3
if [ -f $name3 ]
then
zeilen=` cat $name3 | wc -l`
echo "Es wurden $zeilen Zeilen in Datei $name3 gezaehlt"
else
echo "Es ist keine datei"
let datzahler= $datzahler+1
echo "Es wurden $datzahler gezaehlt"
fi;;
*) echo "Skript wird beendet"
exit;;
esac
done
[/code
Das ist wie ich es geschrieben habe, doch er zählt mir trotzdem die c dateien und bei der eingabe von einer textdastei, sagt er es ist keine textdatei.
intergo schrieb:habe es ausprobiert, nur wenn ich eine c- Datei eingebe, erkennt er es auch als Textdatei an.
Eine C-Datei ist doch nicht das Gleiche wie eine txt oder tex-Datei?
Oder wrd es von linux auch als Textdatei angesehen?
Was den Inhalt ausmacht ist damit nicht definiert, das kann eine Logdatei, ein Shellscript, eine Konfigurationsdatei, eine html-Datei, ein Brief im Rohformat, ein in irgend einer Programmierspache geschriebener Programmcode , eine Tabelle in Textformat oder auch nur eine Sammlung von irgendwelchen Worten sein oder tausende Sachen mehr. Für dich von Interesse ist das es keine Binärzeichen hat, einen einheitlichen Zeichensatz verwendet und eventuell noch Zeilen hat. also sollte es eine bei file "text" anzeigen und wenn du ganz streng sein willst, sollte es nicht folgende Ausgabe bei "file" enthalten, oder bei "wc -l" nicht 0 anzeigen.deren Inhalt aus einer sequentiellen Folge von darstellbaren Zeichen eines Zeichensatzes besteht, die durch Steuerzeichen wie Zeilen- und Seitenwechsel untergliedert sein kann
with very long lines, with no line terminators
tooltime@athlon:~> file -b --mime-type /usr/include/stdio.h
text/x-c
tooltime@athlon:~> file -b --mime-type /usr/include/c++/4.5/iostream
text/x-c++
tooltime@athlon:~> file -b --mime-type /etc/fstab
text/plain
tooltime@athlon:~>
intergo schrieb:doch er zählt mir trotzdem die c dateien und bei der eingabe von einer textdastei, sagt er es ist keine textdatei.
if ( test find . -name "*.txt" )
#! /bin/bash
#set -x
#realisiert wc Befehl
datzahler=0
while true
do
echo " 1 für Anzahl der Zeichen "
echo " 2 für ANzahl der Woerter "
echo " 3 für Anzahl der Zeilen "
echo -n " Was soll gezaehlt werden "
read antwort
case $antwort in
1) echo "Welche datei soll gezeahlt werden"
echo "Bitte Datei eingeben"
read name1
file $name1
if ( test find . -name "*.txt" )
then
zeichen=`cat $name1 | wc -c`
echo "Die Anzahl der Zeichen in Datei $name1 betreagt :$zeichen"
else
echo "Ist keine Textdatei"
let datzahler=$datzahler+1
echo "Es wurden $datzahler Dateien gezeahlt"
exit
fi;;
2) echo "Welche Datei soll gezeahlt werden?"
echo "Bitte Datei eingeben"
read name2
file $name2
if [ -f $name2 ]
then
woerter=`cat $name | wc -w`
echo "Die Anzahl der Woerter betreagt : $woerter"
else
echo "Es ist keine Textdatei"
let datzahler=$datzahler+1
echo "Es wurden $datzahler Dateien gezeahlt"
fi;;
3) echo "Welche Datei soll gezeahlt werden?"
echo "Bitte eingeben"
read name3
file -i $name3
if [ -f $name3 ]
then
zeilen=` cat $name3 | wc -l`
echo "Es wurden $zeilen Zeilen in Datei $name3 gezaehlt"
else
echo "Es ist keine datei"
let datzahler= $datzahler+1
echo "Es wurden $datzahler gezaehlt"
fi;;
*) echo "Skript wird beendet"
exit;;
esac
done
#! /bin/bash
#set -x
#realisiert wc Befehl
datzahler=0
while true
do
echo " 1 für Anzahl der Zeichen "
echo " 2 für ANzahl der Woerter "
echo " 3 für Anzahl der Zeilen "
echo -n " Was soll gezaehlt werden "
read antwort
case $antwort in
1) echo "Welche datei soll gezeahlt werden"
echo "Bitte Datei eingeben"
read name1
file $name1
if ( test find . -name "*.txt" )
then
zeichen=`cat $name1 | wc -c`
echo "Die Anzahl der Zeichen in Datei $name1 betreagt :$zeichen"
else
echo "Ist keine Textdatei"
let datzahler=$datzahler+1
echo "Es wurden $datzahler Dateien gezeahlt"
exit
fi;;
2) echo "Welche Datei soll gezeahlt werden?"
echo "Bitte Datei eingeben"
read name2
file $name2
if [ -f $name2 ]
then
woerter=`cat $name | wc -w`
echo "Die Anzahl der Woerter betreagt : $woerter"
else
echo "Es ist keine Textdatei"
let datzahler=$datzahler+1
echo "Es wurden $datzahler Dateien gezeahlt"
fi;;
3) echo "Welche Datei soll gezeahlt werden?"
echo "Bitte eingeben"
read name3
file $name3
if [ -f $name3 ]
then
zeilen=` cat $name3 | wc -l`
echo "Es wurden $zeilen Zeilen in Datei $name3 gezaehlt"
else
echo "Es ist keine datei"
let datzahler= $datzahler+1
echo "Es wurden $datzahler gezaehlt"
fi;;
*) echo "Skript wird beendet"
exit;;
esac
done
@abgdf : ist hier kontraproduktiv wir sind noch am erlernen der Grundlagen der Shellprogrammierung. Und da haben wir "file" und bauchen keine magic-Schnittstellen für Perl oder was auch immer.abgdf schrieb:Oft braucht man dafür Magie ...
intergo schrieb:ok heißt es mit mimetype($file) gibt er mir ne bestimmte codeirung , ob es eine Textdatei sit?
oder verstehe ich es falsch???
grep '^!:mime' /usr/share/misc/magic | sort | uniq