Hallo zusammen,
ich weiß nicht, ob der Titel sinnvol gewählt wurde, oder ob er überhaupt mein Problem trifft, aber ich versuchs einfach mal Vielleicht versteht mich und mein Problem jemand.
Ausgangslage:
Ich möchte ich Bash Skript schreiben, welches mir die Größe aller Unterordner in einem Ordner auflistet, mich nach einer "Schwell-Größe" fragt und alle Ordner, die kleiner als besagte Schwelle sind, am Ende löschen lassen.
Das Skript, welches ich bisher habe, funktioniert, solange die Unterordner keine Leerzeichen haben. Leider bekomme ich das Problem der Leerzeichen nicht in den Griff.
im Konkreten geht es mir um Zeile 20 bis 27.
Für die Auflistung der Unterordner mit Größe nutze ich "du -sm <Pfad/*>", was in der Konsole auch soweit funktioniert. nur leider im bash Skript nicht.
Die einzelnen Unterordner werden/sollten in ein Array übergeben werden, damit am Ende geprüft werden kann, welche Ordner zu löschen sind und diese entsprechend gelöscht werden.
hat jemand eine Idee, was ich falsch mache?
ich weiß nicht, ob der Titel sinnvol gewählt wurde, oder ob er überhaupt mein Problem trifft, aber ich versuchs einfach mal Vielleicht versteht mich und mein Problem jemand.
Ausgangslage:
Ich möchte ich Bash Skript schreiben, welches mir die Größe aller Unterordner in einem Ordner auflistet, mich nach einer "Schwell-Größe" fragt und alle Ordner, die kleiner als besagte Schwelle sind, am Ende löschen lassen.
Das Skript, welches ich bisher habe, funktioniert, solange die Unterordner keine Leerzeichen haben. Leider bekomme ich das Problem der Leerzeichen nicht in den Griff.
Bash:
#!/bin/bash
#Definition zu prüfender Pfade
PFADE=("/Pfad/1/XYZ/" "/Pfad/2/XYZ/" )
#Auswahl des Pfads durch User
echo "Verfügbare Pfade:"
for ((i=0;i<=${#PFADE[@]}-1;i++));
do
echo $i" -"${PFADE[i]}
done
read -p "Welcher Pfad soll bereinigt werden? [0]: " antwort_pfad
antwort_pfad=${antwort_pfad:-0}
#Prüfen ob Pfad leer ist, ggf. Abbruch
if [ -z "$(ls -A "${PFADE[antwort_pfad]}")" ]; then
echo "Abbruch, der Ordner ist leer!"
exit 1
fi
PFAD="${PFADE[antwort_pfad]}"'/*'
echo $PFAD
#exit
#Auflistung der Ordner im Pfad -> speichern im Array
ORDNER=($(du -sm $PFAD))
#ORDNER=($(du -sm ${PFADE[antwort_pfad]}))
echo "Größe : Ordner"
for ((i=0;i<=${#ORDNER[@]}-1;i+=2));
do
echo ${ORDNER[i]} "MB : "${ORDNER[i+1]}
done
exit
im Konkreten geht es mir um Zeile 20 bis 27.
Für die Auflistung der Unterordner mit Größe nutze ich "du -sm <Pfad/*>", was in der Konsole auch soweit funktioniert. nur leider im bash Skript nicht.
Die einzelnen Unterordner werden/sollten in ein Array übergeben werden, damit am Ende geprüft werden kann, welche Ordner zu löschen sind und diese entsprechend gelöscht werden.
Bash:
#Unter welcher Größe soll gelöscht werden?
read -p "Ab welcher Größe soll gelöscht werden? in MB [150]: " groesse
groesse=${groesse:-150}
#Frage ob gelöscht werden soll
read -p "Alle Ordner kleiner "$groesse" MB löschen? y/n [n]: " antwort
antwort=${antwort:-n}
#ggf. löschen
if [ $antwort = y ] || [ $antwort = Y ]
then
for ((i=0;i<=${#ORDNER[@]}-1;i+=2));
do
if [ ${ORDNER[i]} -lt $groesse ]
then
rm -r ${ORDNER[i+1]}
echo ${ORDNER[i+1]}" ("${ORDNER[i]}"MB) gelöscht!"
fi
done
else
echo "nichts gelöscht. Ende gut alles gut..."
fi
hat jemand eine Idee, was ich falsch mache?