PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bash - Prüfen ob Dateien vorhanden sind



AS2E
21-02-2011, 18:11
Hallo zusammen

Ich möchte in einem Shell-Script prüfen ob in einem Verzeichnis eine (oder mehrere) Datei vorhanden ist, deren Dateiname mit "test" beginnt. Ich habe versucht das ganze wie folgt zu lösen.


if [ -f /opt/data/test.* ] ; then
echo 'blabla'
fi

Solange nur eine Datei in dem Verzeichnis liegt, welche mit "test" beginnt, funktioniert das problemlos. Befinden sich jedoch mehrere solcher Dateien im Verzeichnis, erscheint eine "too many arguments"-Fehlermeldung.

Wie kann ich das denn lösen?

Vielen Dank.

jeebee
21-02-2011, 21:26
zb mit
for file in /opt/data/test.*; do
if [ -f $file ]; then
echo 'blabla'
fi
done

das problem ist, dass test (und [) -f nur einen file name als argument nimmt (siehe auch man 1 test).

AS2E
22-02-2011, 22:06
Schade, hatte eigentlich gehofft, dass es dafür noch eine einfachere Möglichkeit gibt. Naja, so funktionierts wenigstens, danke für den Tipp. Hier noch mein Code, falls es jemanden interessiert. Ich frage damit beim Benutzer nach, ob die bestehenden Dateien gelöscht werden sollen.


for tfile in /opt/data/$name.* ] ; do
if [ -f $tfile ] ; then
echo 'Bestehende Dateien überschreiben?'
read answer
if [ "$answer" = y -o "$answer" = Y ] ; then
rm /opt/data/$name.*
echo 'Dateien wurden gelöscht!'
break
else
echo 'Bestehende Dateien werden verwendet!'
break
fi
fi
done

zst
23-02-2011, 09:23
Wenn Du ohnehin ALLE Dateien nach Rückfrage löschen möchtest, egal wie viele da sind, dann könntest Du auf die for-Schleife verzichten und die Entscheidung anhand der ANZAHL der Dateien festlegen.