• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] test -d findet Verzeichnisse nicht mehr

catweasel

Hacker
Hi,

während "find" die Verzeichnisse finden:

Code:
mm@linux1:~> find /home/mm/install/ -maxdepth 1 -type d
/home/mm/install/
/home/mm/install/google-earth
/home/mm/install/virtualbox
/home/mm/install/ati-installer

werden sie so nicht gefunden:

Code:
#! /bin/bash

a='/home/mm/install'

for i in `ls $a`; do
	if [ -d $i ];	then
		echo "$i:	Verzeichnis"
	else
		echo "$i:	kein Verzeichnis"
	fi
done

Code:
mm@linux1:~> ./test.sh
ati-installer:  kein Verzeichnis
google-earth:   kein Verzeichnis
virtualbox:     kein Verzeichnis

Was stimmt mit den Verzeichnissen nicht mehr?
 

byron1778

Hacker
Hallo!

Ich konnte das jetzt nicht auf einem Linux System testen, sondern musste auf ein Unix System ausweichen.
dort produziert es denselben Fehler wie bei dir!

In einer Manpage konnte ich folgendes zum ls -d Befehl finden!

-d, --directory
list directory entries instead of contents

Weiters konnte ich folgendes finden:

http://www.linuxconfig.org/Bash_scripting_Tutorial#File_Testing

Code:
#!/bin/bash
directory="./BashScripting"

# bash check if directory exists
if [ -d $directory ]; then
	echo "Directory exists"
else 
	echo "Directory does not exists"
fi

Mit -d fragt man ab, ob ein Directory existiert und nicht, ob es eines ist!
So verstehe ich es jedenfalls!

Hoffe, dass das geholfen hat!

mfG
 

stka

Guru
Ich habe dein Skript mit "test -d " mal kopiert und getestet, hier klappt das so wie es soll.
 

byron1778

Hacker
Hallo!

So geht es auch:

Code:
#!/bin/bash -x

a='/export/'

for i in `ls -d $a/*`; do
   if [ -d $i ];   then
      echo "$i:   Verzeichnis"
   else
      echo "$i:   kein Verzeichnis"
   fi
done

ls -d muss auf ls -d $a/* erweitert werden!
Dann hat es geklappt!

mfG
 
OP
C

catweasel

Hacker
Thx! Brauche also nicht alles neu formatieren :irre:

Zum Beweis meiner Einsicht noch eine Version:

Code:
#! /bin/bash

a='/home/mm/install'

for i in `ls $a`; do
	if [ -d "$a/$i" ];	then
		echo "$a/$i:	Verzeichnis"
	else
		echo "$a/$i:	kein Verzeichnis"
	fi
done
 

regexer

Advanced Hacker
... wobei man den ls weglassen sollte. Besser:
Code:
for i in "$a"/*

Siehe http://jengelh.medozas.de/articles/recurring-errors-sh.php
 
Oben