Ich habe versucht, ein Shell-Skript zu schreiben, das einen Verzeichnispfad d als Argument verwendet und rekursiv eine tief eingerückte Liste aller Dateien und Verzeichnisse in d druckt. Das Argument d ist jedoch optional. Wenn kein Argument angegeben wird, wird eine tief eingerückte Liste aller Dateien und Verzeichnisse im aktuellen Verzeichnis gedruckt. Hier ist mein Code:
# the method for tree
myspace=""
spaceCount=0
tree(){
cd "$1"
for i in *; do
if [ -d "$i" ]; then
echo -n "|"
for (( j=0;j<spaceCount;j++ ))
do
echo -n "$myspace"
done
echo "--$i"
spaceCount=$((spaceCount+1))
myspace=" |"
tree "$i"
else
echo -n "|"
for (( j=0;j<spaceCount;j++ ))
do
echo -n "$myspace"
done
echo "--$i"
fi
done
cd ../
spaceCount=$((spaceCount-1))
}
if [ "$1" != "" ]; then
file="$1"
fi
echo ".$file"
tree "$file"
Wenn ein Ordner leer ist, wird ein Stern wie folgt gedruckt:
Wie kann ich das Problem lösen?
quelle
shopt -s nullglob
?[ -e "$i" ] || continue
am Anfang oder in Ihrerfor
Schleife ein hinzufügen, um das herauszufiltern,*
indem Sie prüfen, ob eine Datei vorhanden ist (dies würde sich auf das Verhalten von Verzeichnissen auswirken, die Sie gelesen haben, für die Sie jedoch keine Suchberechtigungen haben). Könnten Sie bitte näher erläutern, ob "das Verhalten von Verzeichnissen, die Sie gelesen haben, aber keine Suchberechtigungen haben", beeinflusst wird?