Hallo,
wie kann ich per Shell Skript ein leeres Verzeichnis erkennen?
test hat ja scheinbar nur für Dateien brauchbar.
Gibt es sowas auch für Verzeichnisse?
Florian
leere Verzeichnisse
leere Verzeichnisse
The box said "Windows 95, 98 or better" - so I installed Linux ...
Re: leere Verzeichnisse
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
dir_is_empty() {
if [ ! -d "$1" ] ; then
return 2 # Parameter ist kein Verzeichnis
fi
NUM_DIRENTRIES=`ls -a "$1" | wc -l`
if [ "$NUM_DIRENTRIES" -eq 2 ] ; then
return 0 # Leeres Verzeichnis
fi
return 1 # Nicht-leeres Verzeichnis
}
</font><hr></pre></blockquote>
Pack Dir die Funktion in Dein Skript und verwende wie folgt:<pre>
if dir_is_empty $MEIN_VERZEICHNIS ; then
echo "Das Verzeichnis ist aber leer."
else
echo "OK, $MEIN_VERZEICHNIS hat noch Inhalt."
fi</pre>Hintergrund: Jedes Verzeichnis muss mindestens 2 Einträge besitzen: "." als Verweis auf sich selbst und ".." als Verweis auf das übergeordnete Verzeichnis. Die Funktion zählt lediglich die Anzahl Einträge; bei 2 (eben "." und "..") ist das Verzeichnis leer. Damit die Funktion mit Sicherheit arbeiten kann, wird vorher geprüft, ob der Parameter überhaupt ein Verzeichnis ist. Bei leerem Verzeichnis ist der Return-Code 0 (logisch wahr für die Shell), bei nicht leerem Verzeichnis 1 (logisch falsch für die Shell) und bei Nicht-Verzeichnis 2 (auch logisch falsch <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">).
Jochen
dir_is_empty() {
if [ ! -d "$1" ] ; then
return 2 # Parameter ist kein Verzeichnis
fi
NUM_DIRENTRIES=`ls -a "$1" | wc -l`
if [ "$NUM_DIRENTRIES" -eq 2 ] ; then
return 0 # Leeres Verzeichnis
fi
return 1 # Nicht-leeres Verzeichnis
}
</font><hr></pre></blockquote>
Pack Dir die Funktion in Dein Skript und verwende wie folgt:<pre>
if dir_is_empty $MEIN_VERZEICHNIS ; then
echo "Das Verzeichnis ist aber leer."
else
echo "OK, $MEIN_VERZEICHNIS hat noch Inhalt."
fi</pre>Hintergrund: Jedes Verzeichnis muss mindestens 2 Einträge besitzen: "." als Verweis auf sich selbst und ".." als Verweis auf das übergeordnete Verzeichnis. Die Funktion zählt lediglich die Anzahl Einträge; bei 2 (eben "." und "..") ist das Verzeichnis leer. Damit die Funktion mit Sicherheit arbeiten kann, wird vorher geprüft, ob der Parameter überhaupt ein Verzeichnis ist. Bei leerem Verzeichnis ist der Return-Code 0 (logisch wahr für die Shell), bei nicht leerem Verzeichnis 1 (logisch falsch für die Shell) und bei Nicht-Verzeichnis 2 (auch logisch falsch <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">).
Jochen