Как я могу заставить 'rm' перемещать файлы в корзину?

62

Я использую терминал ежедневно, я буду часто использовать rm DirectoryName. Иногда я немного схожу с ума и делаю rm *. Как вы можете себе представить, эти махинации иногда возвращаются и бьют меня по лицу. Кто-нибудь знает, как я создаю отображение, поэтому rm whateverперемещает все в корзину, которую я затем удаляю вручную.

Стив
источник
3
Вы можете сделатьmv /file/to/delete ~./Trash
6
Трудно поставить тренировочные колеса на такой точный инструмент, как rm, не нарушая другие скрипты. Нечто подобное alias rm=/bin/rm -iдолжно вывести вас из безумия . Кроме того - какой каталог корзины вы хотите использовать rm? Это становится неуклюжим, поскольку в Mac OS X есть каталог для каждого тома, а также корзина на уровне пользователя.
bmike
1
Если вы используете zsh, по умолчанию вам будет предложено, когда вы это сделаете rm *илиrm /path/*
Даниэль Серодио
1
Добавьте меня в список людей, которые думают, что это такой ужасно опасный вопрос. Если бы вы работали на меня, я бы старался не шлепать вас, пока вы не пообещали НИКОГДА не «немного сойти с ума» в приглашении оболочки и выполнять такие команды, как «rm». Я также хотел бы удостовериться, что у вас нет административных привилегий sudo для любой машины, которую я использую или за которую я несу ответственность. Прежде чем я наберу «rm» или «sudo», я физически встаю и спрашиваю себя, уверен ли я на 100%, что понимаю последствия того, что я собираюсь сделать. Может быть, вам просто нужно сделать "rm -rf" и некоторое время страдать.
Уилфред Смит
Заранее извиняюсь, если мой комментарий кажется жестоким, но сам вопрос ужасает меня.
Уилфред Смит

Ответы:

79

Плохая идея

Использование rmдля перемещения файлов в корзину похоже на травку. Это распространено и доставляет удовольствие, но может быть вредным для вас в будущем. ;)

Вам действительно нужно контролировать себя при использовании rm.


Не используйте рм

Представьте себе , вы привыкли к тому, что вы переезжаете в мусор и привыкаете к этому. Конечно, ваша система безопасна, но когда вы входите в блокнот друга (или вашей жены или вашего босса) и хотите что-то удалить? На самом деле вы будете использовать настоящие rm- удаляя эти файлы навсегда. Это плохая привычка, и ты должен это знать.

Поэтому вместо этого установите rmtrashи привыкните использовать его:

# install rmtrash, (either from the macports or by the brew.)
$ alias trash="rmtrash"
$ alias   del="rmtrash"       # del / trash are shorter than rmtrash

Исправление вредных привычек

Другая вещь, которую вы можете сделать, чтобы заставить себя использовать rmtrashвместо rmпсевдонима свое собственное сообщение в вашем .profile.

alias rm="echo Use 'del', or the full path i.e. '/bin/rm'"

Таким образом, всякий раз, когда вы используете rm, вам будет предложено либо использовать rmtrashили /bin/rm. Помните, что это только временно, через некоторое время вы должны удалить псевдоним.


Никогда, не делай что-то вроде этого:

$ pwd
/
$ cd /tnp; rm -rf *
sh: cd: /tnp: No such file or directory

Pop Quiz: В каком каталоге будет rmработать команда? :)

Ps: Просто удалил некоторые нежелательные правки в этом посте, что добавило чуши псевдонимов.

jm666
источник
14
&&это ваш спасательный круг. ;это дьявол PS Ответ в том, что почти все в вашей системе исчезает, в приведенном выше примере.
Джейсон Салаз
Хотя rm не выполняет безопасное удаление, но переходит в корзину / пусто (в моей настройке).
Майк Граф
1
trash-cliВместо этого пользователи Debian / Ubuntu устанавливают , например, aptitude install trash-cli- см. github.com/andreafrancia/trash-cli
Даниэль Соколовский
@ jm666 Также проверьте корзину ( сообщение в блоге и источник ). Он просит Finder для уничтожения файлов. Кроме того, он также может использовать стандартные API файловой системы Objective C (быстрее) и использовать Finder в случае недостаточных прав. brew install trash
Parth
rmtrashдействительно старый, последний раз обновленный в 2003 году, и это показывает. У него гораздо меньше опций, чем rm, и, если вы скажете rmtrashна дополнительном томе, он переместит эти файлы в корзину вашего пользователя на системном диске, что может занять много времени для больших файлов. trashВариант рекомендован Parth лучше, решая проблему Keep-на-же-громкости, но по- прежнему не хватает много rmвариантов.
Уоррен Янг
25

Я могу придумать дюжину способов закодировать это, но категорически отказываюсь вводить любой из них в ответ. Я настоятельно рекомендую вам избавиться от привычки немного сходить с ума . Вы не должны иметь привычку использовать rmвообще, если вы не можете использовать его должным образом.

Фундаментальная проблема здесь заключается в том, что даже если вы установите систему безопасности в своей собственной системе, это только поможет вам сохранить ваши вредные привычки, и когда вы окажетесь когда-нибудь на другом компьютере, который не имеет таких же пользовательских защит, вы будете сделать что-то невероятно плохое.

Правильным решением является использование в том rmвиде, в котором оно предназначено для использования, включая добавление -iаргумента вручную, если у вас есть сомнения относительно расширения глобуса, и наличие хороших резервных копий системы, которые вы можете восстановить в случае серьезной ошибки пользователя. Попытка добавить «мусор» к командам, которые в остальной части вселенной не используют, это полпути, который является худшим из обоих миров.

Или используйте мусор или не используйте. Использованиеrmне идет в мусор, он удаляет.

Если вы хотите использовать корзину, в этом нет ничего плохого. Просто привыкните использовать rmtrashкоманду вместо rm. Это поможет вашему мозгу понять, что происходит, и не приведет вас к плохой привычке, которая позже вызовет горе.

Калеб
источник
1
Ваша точка зрения не вычисляется в этом случае. Люди случайно удаляют вещи ежедневно, резервные копии системы не работают в случае домашнего компьютера (который у меня есть), так как ресурсы ограничены, переход в мусорное ведро является гораздо более эффективным способом обработки этих удалений для моего конкретного вариант использования.
Стив
5
@ Стив, ты полностью упустил суть. rmпо определению удаляет файл с диска. Он не отправляет его в корзину. Обучение тому, как использовать, rmкогда вы имеете в виду отправить в корзину, приводит вас к катастрофе. Если вы хотите отправить в корзину, использовать rmtrashили программу, которая была разработана для работы, то вы не столкнетесь с кошмарами позже. Я не говорил, что использование мусора по своей сути неправильно, но если вы хотите его использовать, не подключайте его к чему-то, что не предназначено для его использования!
Калеб
2
brew install rmtrashи прекратить использоватьrm
GabLeRoux
Это потрясающий ответ, прояснив несколько вещей для меня. Я постараюсь сформировать привычку использовать rmtrashвместо rm.
Шехарьяр
sudo add-apt-repository ppa: nateshmbhat / rm-trash. Затем установите "rm-trash"
Натеш Бхат
3

Есть способы защитить себя от ужасных последствий rm. Однако я согласен с другими комментаторами здесь: очень мало хороших.

Ни на минуту не верьте, что изменение командной среды поможет вам. Например, вы найдете людей в Интернете везде, которые рекомендуют делать такие вещи:

alias rm="rm -i"

или же

function rm()
{
    echo >&2 'rm forbidden; use "/bin/rm"'
}
export -f rm

Это не будет работать. Период. Есть множество случаев использования, где эти маленькие хитрости салона потерпят неудачу.

Единственный надежный способ избавиться от опасности rm- настроить регулярный процесс резервного копирования через cron в каталогах, где я работаю. Raw UNIX делает это для вас хорошо, с большой простотой, используя findв сочетании с -mtimeпроверкой файлов, которые были обновлены в течение определенного периода времени или позже.

Джим Кэмпбелл
источник
+1 для cronодного. Спасибо :)
bmike
2

Используйте инструмент командной строки, такой как rmtrash или скрипт, который использует appscript для вызова Finder и удаления.

После установки rmtras сказать / usr / local / bin / rmtrash созданный псевдоним для bash

alias rm='rmtrash'

Вы можете использовать \ rm для прямого вызова rm и игнорировать псевдоним

user151019
источник
14
Если вы пользуетесь подобным инструментом rmtrash, сделайте себе одолжение и используйте его под собственным именем . Никогда псевдонимами вещи, которые не rmдо rm, будет когда- нибудь укусить вас.
Калеб
1
rmtrashнесовместим с rm(не поддерживает те же параметры командной строки, что и -r), поэтому псевдоним действительно бесполезен в любом случае
Perry
Это плохая идея псевдонима rmtrashк rm. Мало того, что они не совместимы, но и это будет усиливать вредную привычку, и вы случайно будете использовать rmв другой системе, думая, что вы только используете rmtrash.
Фаяз
1

Просто хочу добавить полезную привычку для тех, кто этого еще не делал. Прежде чем использовать rm для чего-либо, сначала выполните «ls». Таким образом, вы можете увидеть все файлы, которые вы собираетесь удалить. Затем, вместо того, чтобы перепечатывать, просто потяните предыдущую команду ls и замените ls на rm. Эта привычка уменьшила много беспокойства при вызове rm.

Скотт Бриджмен
источник
-1

Введение (вы можете пропустить это)

Для меня rm -iбыло бы достаточно, потому что он предлагает вам перед удалением любого файла. Тем не менее, некоторая дополнительная безопасность, предоставляемая safe-rmвовсе не плохая идея.

Простого aliasлайка rm=safe-rm -i может быть достаточно, однако rm -rfон не сработает, поскольку -iпереопределяется -f.

Итак, мы должны быть уверены, что -iвсегда последуем -f!


Мое решение (3 шага):

  • Установите safe-rm: brew install safe-rm

    Вы по-прежнему можете работать с rm, но вы должны изменить RM_BINв следующем шаге

  • Отредактируйте ваш ~/.profile(или bash_profile или любой другой) и поместите следующий фрагмент кода, (который содержит и aliasи function):

    alias rm="rm_i"
    
    function rm_i(){
    RM_BIN=safe-rm # you can replace it with regular rm if you like
    
    args=""
    files=""
    argsDone=0 # to make sure arguments are before the files
    
    for var in "$@"
    do
        if [[ $var == \-* ]] ; then
            if [ $argsDone -eq 1 ] ; then
                $RM_BIN # just to show the usage of rm
                return
            fi
            args+=" $var"
        else
            argsDone=1
            files+=" $var"
        fi
    done
    
    args+=" -i" # Put -i at the end (so rm -rf will not ignore it)
    
    $RM_BIN $args $files
    }
    
  • Наконец , logoutи login, следовательно, обновления в .profile применяются. НЕ используйте его до выхода / входа!


Примечания:

  • Его можно применить к любому дистрибутиву Linux с небольшими изменениями.
  • Это НЕ перемещает ваш штат в трэш. Он просто спрашивает вас перед удалением каждого файла!
  • Это работает с -rfи с регулярными выражениями.
  • Если вы действительно хотите использовать rm -rf БЕЗ запроса на каждый файл / папку, которую вы все еще можете использовать /bin/rm -rf(или safe-rm -rfесли вы установили его).
  • Нет больше непреднамеренного rm -rf или rm * ;)
Пасхалис
источник
5
Привязать rm к чему-то большему, чем он сам (например alias rm='sudo rm'), все равно что привязать узи к кухонному ножу: когда-нибудь вы получите больше, чем рассчитывали, когда будете резать ананас. Привязывать rm к чему-то меньшему, чем он сам (например alias rm='rmtrash'), все равно, что позволить своим детям играть с обезоруженными ручными гранатами и не учить их тому, чем они являются на самом деле: однажды, когда они столкнутся с настоящим, они не будут относиться к нему с должной осторожностью. В любом случае, псевдонимы rm вредны для вашей личной безопасности и здоровья населения!
Калеб
2
Использование чего-то вроде safe-rm - разумный совет. Псевдоним это для рм нет. Используйте его под своим именем или под уникальным псевдонимом, чтобы вы не считали само собой разумеющимся страховочную сеть, которая не всегда будет там.
Калеб
Я понимаю вашу точку зрения. НО, причина, по которой я это сделал, заключается в том, что я работаю со многими терминалами ... некоторыми удаленными терминалами и некоторыми местными жителями. И я хочу бросить много гранат на удаленные терминалы, но когда я случайно потяну защитную пломбу на местном терминале, я хочу увидеть предупреждение до того, как произойдет взрыв .
Paschalis
@Paschalis, а что будет, если нужно использовать скрипт или установленную программу rm? Кроме того, точка зрения Калеба еще более верна - если вы привыкнете к системе с псевдонимом safe-rm, вы можете быть опрометчивы с ней и в конечном итоге использовать ее в системе с несвязанным rm.
Manishearth