johnix
Jungspund
Hallo, ich habe versucht ein Shell Script zu schreiben, das mir mit Hilfe von fdupes; doppelte Dateien löscht.
Ich benutze die Bash und Ubuntu 10.04
Ich stricke da schon Jahre daran herum. Die erste Datei wird beim jetzigen Script, gelöscht. Leider aber scheint echo keine Wirkung zu haben. Ich bin Anfänger und das Script sollte mir helfen, die Bash zu verstehen, bzw, den Umgang damit. Vielleicht mache ich ja nur eine Kleinigkeit falsch.
Ich benutze die Bash und Ubuntu 10.04
Code:
#!/bin/bash
# Info
# DoppelteDateienLoeschen ddl.sh
# X.inh wurde von fdupes erzeugt
# fdupes . > /root/X.inh
# und beinhaltet eine Auflistung doppelter Dateien in Blocks,
# welche durch je eine LEERZEILE, getrennt sind.
# Die erste und zweite Zeile, eines Blockes, sollte demnach einen Dateinamen enthalten.
# ./datei.xxx
# Die LETZTE in einem Block enthaltene Datei, soll erhalten bleiben, alle anderen werden geloescht.
# Die letzte Zeile von X.inh, muss eine Leerzeile sein.
# Trotzdem das Script nach /usr/bin gesetzt wurde und chmod u+x, angewendet wurde; laesst es sich nur mit "bash ddl.sh"; starten.
# Nach /usr/local/bin setzen.
# Es muss, aus dem Verzeichniss aufgerufen werden, aus dem die X.inh, mit fdupes erzeugt wurde.
i=0
b=1 # boolean:true
AFILE=/root/X.inh
while read ZEILE
do # durchlaeuft die Datei Zeile fuer Zeile.
{
echo $Zeile
if [ "${ZEILE}" != "" -a "$b" -eq "0" ] # wird ausser beim ersten Durchlauf, nur noch durchlaufen, im Block.
then # Zeile2 nicht leer, Zeile1 loeschen b=true
{
exec rm "$ZEILE1" # If Abfrage aus logischen Gruenden, vor die jetzt folgende if Abfrage gesetzt.
echo "$ZEILE1" "gelöscht."
ZEILE1="${ZEILE}"
echo "$ZEILE1"
}
fi
if [ "${ZEILE}" != "" -a "$b" -eq "1" ] # wird nur ein mal durchlaufen, beim ersten einzulesenden String, pro Block.
then # Zeile nicht leer und b=false
{
ZEILE1="${ZEILE}"
b=0
echo "$ZEILE1" $b
}
fi
if [ "${ZEILE}" = "" -a "$b" -eq "1" ] # wird durchlaufen wenn ZEILE leer ist.
then # Fehler. b=false
{
echo "FEHLER; ZEILE leer und b=1" # If Abfrage aus logischen Gruenden, vor die jetzt folgende if Abfrage gesetzt.
exit 1
}
fi
if [ "${ZEILE}" = "" -a "$b" -eq "0" ] # wird durchlaufen wenn ZEILE leer ist.
then # b=true
{
echo "$ZEILE" "Zeile leer"
b=1
echo $b
}
fi
i=$(($i + 1)) # i++
echo $i
}
done < $AFILE # Ende while. Uebergabe der Datei.
exit 0
Ich stricke da schon Jahre daran herum. Die erste Datei wird beim jetzigen Script, gelöscht. Leider aber scheint echo keine Wirkung zu haben. Ich bin Anfänger und das Script sollte mir helfen, die Bash zu verstehen, bzw, den Umgang damit. Vielleicht mache ich ja nur eine Kleinigkeit falsch.
Zuletzt bearbeitet: