Mailinglist Archive: opensuse-de (4826 mails)

< Previous Next >
Re: Eine Lössung für alle del anstatt von rm Re: HILFE:un do rm -r /etc aus versehen gelöscht auf Reiserfs !! !!
  • From: Jan.Trippler@xxxxxxxxxxx (Jan Trippler)
  • Date: Tue, 15 Apr 2003 19:11:14 +0000 (UTC)
  • Message-id: <20030415210942.A15644@xxxxxxxxxxxxxx>
On Die, 15 Apr 2003 at 09:57 (+0200), Patrice Staudt wrote:
Hallo David,

Der bin ich zwar nicht ...

Danke für deine Kritik ich hätte viel wenig Ärger gehabt
Wenn das noch etwas gemacht werden sollte :

#!/bin/bash
# srm (secure remove)
trash=$HOME/Papierkorb;
if ! test -x $trash ; then
mkdir $trash;
echo "Neuer Ordner $trash";
fi

Nicht gut: Du testest, ob es eine Datei $trash gibt, die das x-Bit
gesetzt hat - nicht, ob es ein Verzeichnis ist. Du musst den
Returncode des mkdir abfangen, z. B. so:
test -d $trash || mkdir $trash || exit 1

for file in "$@"
do
mv -i "$file" "$trash/$$-$1";
if [ $? -eq 0 ] ; then
echo "$file wird nach $trash/$$-$1 verschoben";
else
echo "Es könnte nicht geloscht werden !!";
fi
done

Die ; am Zeilenende sind überflüssig. Das ist nicht C.

Mit der $$ kann ich erreichen wen mehr mals gelöscht wird es nicht
überschrieben wird. Wäre da noch was sinnvolles zu machen ?

Was passiert in Deinem Script, wenn z. B. als Argument dir1/datei1
angegeben wird? Genau: mv will nach $trash/$$-dir1/datei1 verschieben
und bricht dabei zusammen.

Dein Fall ($$) berücksichtigt ebenfalls nicht, dass es z. B.
dir1/datei1, dir2/datei1, dir3/datei1 geben kann. mv -i verhindert
zwar das Überschreiben, der Anwender hat dann aber die Wahl,
entweder nicht zu löschen oder zu überschreiben. Beide Varianten
sind nicht sonderlich erstrebenswert (vor allem, wenn viele Dateien
mit dem gleichen Namen auftauchen - denke nur mal an eine Webseite
mit lauter index.html-Dateien).

Ich würde folgenden Ansatz angehen (ungetestet):

cnt=1
for file in "$@"
do
new="$trash/`basename \"$1\"`-$$.$cnt"
mv "$file" "$new"
if [ $? -eq 0 ] ; then
echo "$file wurde nach $new verschoben"
else
echo "Es konnte nicht gelöscht werden!"
fi
cnt=`expr $cnt + 1`
done

Jan


< Previous Next >
Follow Ups