# Multiple Files in Shell testen?

## kami22

Hi,

kurze Frage zu shell:

Wenn ich checken will ob ein Filetyp in einem Verzeichnis existiert wie mache ich das? if [ -f /home/kami/*.txt ]; then hat das problem das es nicht geht wenn es mehrere txt dateien in dem verzeichnis gibt. 

Gruß kami

----------

## Finswimmer

[ $(ls /tmp/*.tx2342t 2>/dev/null|wc -l) -gt 0 ] && echo true

wäre eine Möglichkeit.

Oder du versuchst es mit find.

Ich denke, da gibt es mehrere Möglichkeiten.

Gruß

Tobi

----------

## slick

(alle ungetestet)

find

```
if [ "`find /pfad -maxdepth 1 -type f -iname '*.txt' 2> /dev/null`" == "" ] ; then ...
```

ls

```
if [ "`ls -1 /pfad/*.txt 2> /dev/null`" == "" ] ; then ...
```

ls & grep

```
if ls -1 /pfad/ | grep ".txt$" &> /dev/null ; then ...
```

----------

## 69719

Oder auch

```

ls *.dlc &>/dev/null && {

   echo "datei existiert."

   ...

}

```

----------

## Genone

Noch ne Variante ohne externe Programme:

```
if [ "$(echo *.txt)" != "*.txt" ]; then

    # Textdatei vorhanden

else

    # keine Textdatei vorhanden

fi
```

----------

## kami22

Ich habe jetzt folgende Variante: if $(ls /home/kami/*.txt | grep -q 'txt'); then

wie findet ihr die?

Gruß kami

----------

## Genone

 *kami22 wrote:*   

> Ich habe jetzt folgende Variante: if $(ls /home/kami/*.txt | grep -q 'txt'); then
> 
> wie findet ihr die?

 

Aus mehreren Gründen schlecht:

1) `grep 'txt'` würde z.B. auch bei test-txt.sh zutreffen

2) weiss jetzt nicht ob `if $(command); then` legal ist (insbesondere ohne Quotes), würde ich aber zumindest als schlechten Stil ankreiden. Entweder `if command; then` oder `if [ -n "$(command)" ]; then`

3) ist jetzt sehr subjektiv, aber mMn hat `ls`in Skripten nix verloren.

----------

## kami22

Hi,

okay danke Genone.

Dann nehme ich deine Variante.

Gruß kami

----------

## schachti

 *Genone wrote:*   

> 3) ist jetzt sehr subjektiv, aber mMn hat `ls`in Skripten nix verloren.

 

Warum das?

----------

## Genone

 *schachti wrote:*   

>  *Genone wrote:*   3) ist jetzt sehr subjektiv, aber mMn hat `ls`in Skripten nix verloren. 
> 
> Warum das?

 

Weils eigentlich immer ne bessere Option gibt. Um nur Dateinamen aufzulisten reicht die Shell Expansion alleine aus, um detaillierte Dateiinformationen zu bekommen gitb es `stat`, und für kompliziertere Aufgaben kann man `find` nehmen. Und wenn man sich das Ausgabeformat von `ls -l` ansieht merkt man schnell dass es nicht sonderlich skriptfreundlich ist.

Ist aber wie gesagt meine sehr subjektive Ansicht.

----------

