Jak uniwersalny pytasz? Czy masz na myśli każde wywołanie RM przez każdego użytkownika lub proces? A może tylko dla ciebie, gdy używasz bash? Lub ..
djeikyb
Odpowiedzi:
13
Jest na to przepis na webupd8.org . Aby zapobiec gniciu linków, oto ważna informacja (z kilkoma dodatkami).
sudo apt-get install trash-cli
Będzie to zainstalować trash, empty-trash, list-trashi restore-trashpolecenia, które można użyć, jak jest lub czynią rmalias trash(patrz niżej).
Semantyka trashpolecenia jest nieco inna niż standardowa rm- nie wymaga -rflagi, aby móc usunąć katalogi. Jeśli Ci to przeszkadza, webupd8.org proponuje następujący skrypt, który możesz umieścić w swojej ŚCIEŻCE i wywołać 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[@]}"
W systemie Ubuntu 12.04 i nowszych ostatnia komenda w skrypcie powinna być trash-put "${cmd[@]}"zamiast trash "${cmd[@]}"(ponieważ komenda zmieniła się z trashna trash-put).
Następnie uczyń skrypt wykonywalnym:
chmod +x trash-rm
Gdy znajdziesz go w jakimś katalogu w swoim katalogu PATH, dodaj do swojego ~ / .bashrc alias, który sprawi, że bash wywoła twój skrypt zamiast rzeczywistego rmpolecenia:
alias rm="trash-rm"
Jak słusznie wskazuje djeikyb, sztuczka aliasowa .bashrc działałaby tylko dla użytkownika, którego zmodyfikowano .bashrc, i tylko w sesji terminalu bash.
To dobra odpowiedź, ale byłoby jeszcze lepiej, gdybyś ją zreorganizował, aby podkreślić główną koncepcję użycia aliasu. Myślę, że najważniejsze jest, aby zrozumieć, jak „przechwycić” RM. To, co dzieje się na jego miejscu, można dostosować na wiele sposobów.
djeikyb
Warto też wspomnieć, że wpływa to tylko na polecenie rm dla sesji bash użytkownika.
djeikyb
@djeikyb: dzięki za sugestie, zaktualizowałem odpowiedź
Sergey
Działa świetnie dla mnie bez skryptu (właśnie zainstalowany i dodany alias="trash"). Czy wiesz, jaka jest zaleta posiadania skryptu?
desgua
@desgua: celem skryptu jest trashzachowanie się podobnie rmdo usuwania katalogów. Może to być ważne na przykład w przypadku niektórych skryptów, które oczekują rmdziałania w taki sposób. Zaktualizowałem odpowiedź.
Odpowiedzi:
Jest na to przepis na webupd8.org . Aby zapobiec gniciu linków, oto ważna informacja (z kilkoma dodatkami).
Będzie to zainstalować
trash
,empty-trash
,list-trash
irestore-trash
polecenia, które można użyć, jak jest lub czyniąrm
aliastrash
(patrz niżej).Semantyka
trash
polecenia jest nieco inna niż standardowarm
- nie wymaga-r
flagi, aby móc usunąć katalogi. Jeśli Ci to przeszkadza, webupd8.org proponuje następujący skrypt, który możesz umieścić w swojej ŚCIEŻCE i wywołaćtrash-rm
:W systemie Ubuntu 12.04 i nowszych ostatnia komenda w skrypcie powinna być
trash-put "${cmd[@]}"
zamiasttrash "${cmd[@]}"
(ponieważ komenda zmieniła się ztrash
natrash-put
).Następnie uczyń skrypt wykonywalnym:
Gdy znajdziesz go w jakimś katalogu w swoim katalogu
PATH
, dodaj do swojego ~ / .bashrc alias, który sprawi, że bash wywoła twój skrypt zamiast rzeczywistegorm
polecenia:Jak słusznie wskazuje djeikyb, sztuczka aliasowa .bashrc działałaby tylko dla użytkownika, którego zmodyfikowano .bashrc, i tylko w sesji terminalu bash.
I to powinno być to.
źródło
alias="trash"
). Czy wiesz, jaka jest zaleta posiadania skryptu?trash
zachowanie się podobnierm
do usuwania katalogów. Może to być ważne na przykład w przypadku niektórych skryptów, które oczekująrm
działania w taki sposób. Zaktualizowałem odpowiedź.Wydaje się, że libtrash (pakiet libtrash w Ubuntu) to robi, ale nigdy go nie używałem.
źródło