Testen, ob Datei oder Link existiert

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Quilmes
Beiträge: 87
Registriert: 11.04.2008 23:25:52

Testen, ob Datei oder Link existiert

Beitrag von Quilmes » 04.01.2010 00:36:40

Laut dem feinen Manual der Bash und sämtlichen mir untergekommenen Tutorials sollte ein

Code: Alles auswählen

[ -f $SEARCH_DIR/*.foo ]
nachsehen, ob im SEARCH_DIR eine Datei mit der Endung .foo existiert.
Entsprechend sollte

Code: Alles auswählen

[ -h $SEARCH_DIR/*.foo ]
prüfen, ob ein gleichnamiger Link vorhanden ist.
Wenn es mir aber egal ist, ob reguläre Datei oder Link, wie überprüfe ich das dann?
-a und -e tun's jedenfalls nicht, die erkennen keine Symlinks!

Ist das nur ein Feature meiner BASH-version oder unterliege ich einem gobalen Mißverständnis?

Code: Alles auswählen

:~$ bash --version
GNU bash, Version 4.0.28(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
EDITH sagt:
und eine || -Verknüpfung wird auch nicht akzeptiert:

Code: Alles auswählen

[ -f $SEARCH_DIR/*.foo || -h $SEARCH_DIR/*.foo ]]
test.sh: Zeile 46: [: Fehlende `]'
test.sh: Zeile 46: -h: Kommando nicht gefunden.
Die deutsche Rechtschreibung ist Freeware, d.h. Du darfst sie kostenlos nutzen. Allerdings ist sie keine freie Software, d.h. Du darfst sie nicht ändern oder in veränderter Form weitergeben.

Benutzeravatar
feltel
Webmaster
Beiträge: 10458
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Re: Testen, ob Datei oder Link existiert

Beitrag von feltel » 04.01.2010 07:21:10

Code: Alles auswählen

if [ -f $SEARCH_DIR/*.foo -o -h $SEARCH_DIR/*.foo ]
 then
   echo foo-Dateien gefunden
 fi
sollte gehen.

Benutzeravatar
Quilmes
Beiträge: 87
Registriert: 11.04.2008 23:25:52

Re: Testen, ob Datei oder Link existiert

Beitrag von Quilmes » 04.01.2010 16:01:05

feltel hat geschrieben:

Code: Alles auswählen

if [ -f $SEARCH_DIR/*.foo -o -h $SEARCH_DIR/*.foo ]
 then
   echo foo-Dateien gefunden
 fi
sollte gehen.
Ja, tut's. Interessanterweise geht die Negation nur über die Negation der Klammer, nicht der Einzelterme:

Code: Alles auswählen

if [ ! -f $SEARCH_DIR/*.foo -o ! -h $SEARCH_DIR/*.foo ]
 then
   echo "foo-Dateien nicht vorhanden"
 fi
geht nicht, aber

Code: Alles auswählen

if ! [ -f $SEARCH_DIR/*.foo -o -h $SEARCH_DIR/*.foo ]
 then
   echo "foo-Dateien nicht vorhanden."
 fi
funktioniert.

Besten Dank
Quilmes
Die deutsche Rechtschreibung ist Freeware, d.h. Du darfst sie kostenlos nutzen. Allerdings ist sie keine freie Software, d.h. Du darfst sie nicht ändern oder in veränderter Form weitergeben.

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Testen, ob Datei oder Link existiert

Beitrag von GoKi » 04.01.2010 16:06:08

Quilmes hat geschrieben:Ja, tut's. Interessanterweise geht die Negation nur über die Negation der Klammer, nicht der Einzelterme:
Ist schon richtig so. Durch die Oder-Verknüpfung reicht es, wenn eine der Bedingungen erfüllt ist. Also keine Datei oder kein Link, du willst aber keine Datei und kein Link.
Die graue Theorie: http://de.wikipedia.org/wiki/De_Morgansche_Gesetze
MfG GoKi
:wq

Benutzeravatar
Quilmes
Beiträge: 87
Registriert: 11.04.2008 23:25:52

Re: Testen, ob Datei oder Link existiert

Beitrag von Quilmes » 04.01.2010 20:02:24

GoKi hat geschrieben: Die graue Theorie: http://de.wikipedia.org/wiki/De_Morgansche_Gesetze
Autsch! :oops:

Ja, da war mal was. Isdaspeinlich. *schäm*
Die deutsche Rechtschreibung ist Freeware, d.h. Du darfst sie kostenlos nutzen. Allerdings ist sie keine freie Software, d.h. Du darfst sie nicht ändern oder in veränderter Form weitergeben.

Antworten