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