Как я могу заставить '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: Просто удалил некоторые нежелательные правки в этом посте, что добавило чуши псевдонимов.


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 и игнорировать псевдоним


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.