![Abfangen von RM-Aufrufen und Weiterleiten gelöschter Dateien in den Papierkorb](https://rvso.com/image/1036618/Abfangen%20von%20RM-Aufrufen%20und%20Weiterleiten%20gel%C3%B6schter%20Dateien%20in%20den%20Papierkorb.png)
Gibt es eine Möglichkeit, Aufrufe von rm abzufangen und die Dateien nicht dauerhaft zu löschen, sondern in den Papierkorb zu verschieben?
Antwort1
Da ist einRezept auf webupd8.orgdafür. Um Linkrot vorzubeugen, hier die wichtigen Informationen (mit einigen Ergänzungen).
sudo apt-get install trash-cli
Dadurch werden die Befehle trash
, empty-trash
, list-trash
und installiert restore-trash
, die Sie unverändert verwenden oder für die Sie rm
einen Alias erstellen können trash
(siehe unten).
Die Semantik des trash
Befehls weicht etwas vom Standard ab rm
- es ist kein -r
Flag erforderlich, um Verzeichnisse löschen zu können. Falls Sie das stört, schlägt webupd8.org das folgende Skript vor, das Sie in Ihren PATH einfügen und aufrufen können trash-rm
:
#!/bin/bash
# command name: trash-rm
shopt -s extglob
recursive=1
declare -a cmd
((i = 0))
for f in "$@"; do
case "$f" in
(-*([fiIv])r*([fiIv])|-*([fiIv])R*([fiIv]))
tmp="${f//[rR]/}"
if [ -n "$tmp" ]; then
#echo "\$tmp == $tmp"
cmd[$i]="$tmp"
((i++))
fi
recursive=0
;;
(--recursive) recursive=0
;;
(*)
if [ $recursive != 0 -a -d "$f" ]; then
echo "skipping directory: $f"
continue
else
cmd[$i]="$f"
((i++))
fi
;;
esac
done
trash "${cmd[@]}"
In Ubuntu 12.04 und höher sollte der letzte Befehl im Skript trash-put "${cmd[@]}"
anstelle von lauten trash "${cmd[@]}"
(da sich der Befehl von trash
in geändert hat trash-put
).
Machen Sie dann das Skript ausführbar:
chmod +x trash-rm
Sobald Sie es in einem Verzeichnis in Ihrer haben , fügen Sie einen Alias zu Ihrer ~/.bashrc hinzu, wodurch Bash Ihr Skript anstelle des eigentlichen Befehls PATH
aufruft :rm
alias rm="trash-rm"
Wie djeikyb richtig anmerkt, würde der .bashrc-Alias-Trick nur für den Benutzer funktionieren, dessen .bashrc geändert wurde, und nur in einer Bash-Terminalsitzung.
Und das sollte es sein.
Antwort2
Abonnieren(Paket libtrash in Ubuntu) scheint dies zu tun, aber ich habe es nie verwendet.