PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Testen ob es eine datei oder ein verzeichniss ist?



chapaev
30-07-2004, 20:31
Hi leute !

Ich habe ein Problem und komme nicht weiter. :confused:
Ich muss zunächst ein script erstellen, der unterscheiden kann ob eine datei (zat.gz, tar.bz2) oder ein Verzeichniss unter eine bestimmte Adresse liegt.
Ich habe eine textdatei mit volgendem Inhalt:

/home/chapaev/tmp/neue_ordner
und anstatt "/home/chapaev/tmp/neue_ordner" könnte z. B. "/home/chapaev/tmp/archiv.tar.gz"
was kann ich benutzen um zu unterscheiden ob es ein Pfad zu einem Archiv oder eine Verzeichniss ist.

P.S.

cd $(cat textdatei)
klappt nicht

peschmae
30-07-2004, 21:30
file ist dein Gefährte :D



peschmae@thinkpad:~$ file /usr/src/linux-2.6.7.tar.bz2 /usr/src/linux-2.6.7 /usr/src/thinkpad.tar.gz
/usr/src/linux-2.6.7.tar.bz2: bzip2 compressed data, block size = 900k
/usr/src/linux-2.6.7: directory
/usr/src/thinkpad.tar.gz: gzip compressed data, from Unix


MfG Peschmä

chapaev
30-07-2004, 21:37
Danke für die Hilfe

ThorstenS
31-07-2004, 11:53
file hat den 'Nachteil', dass es dir nicht einfach sagt, ob file oder directory.
Vielmehr ist es so clever dir sogar zu sagen was es für dateien vor sich hat.
u.U. ist das mehr als du magst und bist mit der test Methode hier besser bedient:


for i in * ; do

if [ -d "$i" ] ; then
echo -e "$i \tdirectory"
else
echo -e "$i \tfile"
fi
done
Der Output könnte dann so aussehen:

tst@vserver330:~/scripte$ sh DirOrFile.sh
DirOrFile.sh file
testdatei file
testdir directoryman test gibt dir noch einen Haufen weiterer Schalter - z.B. -f für regular file
HTH

peschmae
31-07-2004, 14:21
Er möchte auch zwischen .tar.gz und .tar.bz2 unterscheiden - und dazu braucht man sowieso file.

Zudem hat file auch noch so nen netten Schalter -b den ich vorher übersehen hatte:


peschmae@thinkpad:/usr/src$ file -b /usr/src/linux-2.6.7.tar.bz2 /usr/src/linux-2.6.7 /usr/src/thinkpad.tar.gz
bzip2 compressed data, block size = 900k
directory
gzip compressed data, from Unix


In manchen Fällen ist allerdings Test durchaus ne nette Sache :)

MfG Peschmä

Hans-Georg Normann
31-07-2004, 15:11
Mal eine Frage zu file. Muss ich etwa auch die Spracheinstellungen des Systems auswerten, weil file vielleicht auf einmal die Meldungen in Ostfriesisch zum Besten gibt? Das würde ja so ein dösbaddeliges Script ganz schön zum Wahnsinn treiben. :D

Hans

ThorstenS
31-07-2004, 15:28
Habe ich missverstanden Peschmae- hast recht, da ist natürlich file das tool der Wahl.

@Hans-Georg Normann
Bei so einer auswertung würde es sich anbieten die LC Variablen auf C zu stellen.
Dann kann das script in jeder (?!) Umgebung gleich laufen.

peschmae
31-07-2004, 17:26
Mal eine Frage zu file. Muss ich etwa auch die Spracheinstellungen des Systems auswerten, weil file vielleicht auf einmal die Meldungen in Ostfriesisch zum Besten gibt? Das würde ja so ein dösbaddeliges Script ganz schön zum Wahnsinn treiben. :D


Du musst ja eigentlich nur das bzip2 bzw. gzip auswerten - ok, bei Directory mags n Problem sein. Allerdings ist bei mir trotz sonst komplett deutschem System der Output von File englisch.

MfG Peschmä

P.S. mit -i könnte man auch mime-Info ausgeben lassen, die sind dann wohl immer gleich

Hans-Georg Normann
01-08-2004, 14:58
Allerdings ist bei mir trotz sonst komplett deutschem System der Output von File englisch........... und genau da liegt der Hase im Pfeffer. Nehmen wir mal an, das fünfte auf diese Version erscheinende Release labert einen mit deutschen Texten voll, ich möchte dann den sehen, der sofort darauf kommt, dass da noch ein Script läuft, welches die englischsprachige Version von file erwartet.

Alles schon gehabt (Bei den bösen Brüdern von SCO :eek: ). Da wurde dann aus einem setcolor black lightcyan plötzlich setcolor schwarz hellzyan.

Hans

tuNIxM1TUniX
06-08-2004, 23:20
Wenn ich mal meinen Senf dazu geben darf: Ich würde (falls, wenn, aber) entweder ne Versionsabfrage für 'file' ins Skript einbauen oder die elegantere Lösung nehmen 'LANG=en_EN' vor dem 1. Aufruf ... :D

cu

/edit: Wo wir grad dabei sind:

test -d "foo" || file -b "foo" | grep ...

Ist natürlich noch sehr ausbaufähig... ;)