Насколько универсален ты спрашиваешь? Вы имеете в виду для каждого звонка по каждому пользователю или процессу? Или только для вас, пока вы используете bash? Или ..
djikyb
Ответы:
13
Для этого на webupd8.org есть рецепт . Чтобы предотвратить гниение ссылок, вот важная информация (с некоторыми дополнениями).
sudo apt-get install trash-cli
Это установит trash, empty-trash, list-trashи restore-trashкоманды, которые вы можете использовать как есть или сделать rmпсевдоним trash(см . Ниже)
Семантика trashкоманды немного отличается от стандартной rm- ей не требуется -rфлаг, чтобы можно было удалять каталоги. Если это вас беспокоит, webupd8.org предлагает следующий скрипт, который вы можете вставить в свой PATH и вызвать его 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[@]}"
В Ubuntu 12.04 и более поздних версиях последняя команда в сценарии должна быть trash-put "${cmd[@]}"вместо trash "${cmd[@]}"(поскольку команда изменилась с trashна trash-put).
Затем сделайте скрипт исполняемым:
chmod +x trash-rm
Как только вы поместите его в какой-нибудь каталог PATH, добавьте псевдоним в ~ / .bashrc, что заставит bash вызвать ваш скрипт вместо фактической rmкоманды:
alias rm="trash-rm"
Как правильно указывает djeikyb, трюк с псевдонимом .bashrc будет работать только для пользователя, чье имя .bashrc изменено, и только в сеансе терминала bash.
Это хороший ответ, но было бы еще лучше, если бы вы реорганизовали его, чтобы подчеркнуть основную концепцию использования псевдонима. Я думаю, что наиболее важно понять, как «перехватить» rm. То, что происходит на его месте, можно настроить любым количеством способов.
djeikyb
Также было бы полезно упомянуть, что это влияет только на команду rm для пользовательского сеанса bash.
djeikyb
@djeikyb: спасибо за предложения, я обновил ответ
Сергей
У меня отлично работает без скрипта (только что установил и добавил alias="trash"). Знаете ли вы, в чем преимущество сценария?
Desgua
@desgua: цель скрипта - заставить trashсебя вести себя как rmв отношении удаления каталогов. Это может быть важно для некоторых сценариев, которые, например, ожидают, что rmбудут работать так, как работают. Я обновил ответ.
Сергей
0
libtrash (пакет libtrash в Ubuntu), кажется, делает это, но я никогда не использовал его.
Ответы:
Для этого на webupd8.org есть рецепт . Чтобы предотвратить гниение ссылок, вот важная информация (с некоторыми дополнениями).
Это установит
trash
,empty-trash
,list-trash
иrestore-trash
команды, которые вы можете использовать как есть или сделатьrm
псевдонимtrash
(см . Ниже)Семантика
trash
команды немного отличается от стандартнойrm
- ей не требуется-r
флаг, чтобы можно было удалять каталоги. Если это вас беспокоит, webupd8.org предлагает следующий скрипт, который вы можете вставить в свой PATH и вызвать егоtrash-rm
:В Ubuntu 12.04 и более поздних версиях последняя команда в сценарии должна быть
trash-put "${cmd[@]}"
вместоtrash "${cmd[@]}"
(поскольку команда изменилась сtrash
наtrash-put
).Затем сделайте скрипт исполняемым:
Как только вы поместите его в какой-нибудь каталог
PATH
, добавьте псевдоним в ~ / .bashrc, что заставит bash вызвать ваш скрипт вместо фактическойrm
команды:Как правильно указывает djeikyb, трюк с псевдонимом .bashrc будет работать только для пользователя, чье имя .bashrc изменено, и только в сеансе терминала bash.
И это должно быть.
источник
alias="trash"
). Знаете ли вы, в чем преимущество сценария?trash
себя вести себя какrm
в отношении удаления каталогов. Это может быть важно для некоторых сценариев, которые, например, ожидают, чтоrm
будут работать так, как работают. Я обновил ответ.libtrash (пакет libtrash в Ubuntu), кажется, делает это, но я никогда не использовал его.
источник