Як я можу змусити '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

Уявіть , ви звикли переходити на смітник і звикати до цього. Звичайно, ваша система в безпеці, але коли ви увійдете в зошит друга (або дружини чи начальника) і вам доведеться щось видалити? Ви фактично використовуєте реальне 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

Поп-вікторина: У якому каталозі буде виконуватися rmкоманда? :)

Пс: Просто видалили небажані зміни до цієї публікації, що додало ще дурниць про псевдоніми.


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
парф

rmtrashдійсно старий, востаннє оновлений у 2003 році, і це показує. У нього є набагато менше варіантів, ніж rmякщо ви скажете rmtrashна вторинному томі, вони переміщують ці файли у папку сміття вашого користувача на системному диску, що для великих файлів може зайняти багато часу. trashВаріант рекомендований Parth краще, вирішуючи проблему Keep-на-ж-гучності, але по- , як і раніше НЕ вистачає багато rmваріантів.
Воррен Янг

25

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

Основна проблема тут полягає в тому, що навіть якщо ви встановите мережу безпеки у власній системі, це допоможе лише зберегти ваші шкідливі звички і коли ви трапитесь на інший апарат, який не має однакових спеціальних захистів, робити щось епічно погане.

Правильне рішення полягає в тому, щоб використовувати rmйого, як його мали використовувати, включаючи додавання -iаргументу вручну, коли ви сумніваєтесь у тому, як розшириться глобус, і мати гарні резервні копії системи, які ви зможете відновити у разі серйозної помилки користувача. Спроба додати "сміття" до команд, які в решті Всесвіту не використовують його - це напівшляховий крок, який є найгіршим для обох світів.

Або користуйтеся сміттям, або ні. Використанняrmне йде в сміття, воно видаляється.

Якщо ви хочете скористатися сміттям, в цьому немає нічого поганого. Просто увійдіть у звичку використовувати rmtrashкоманду замість rm. Це допоможе вашому мозку зрозуміти, що відбувається, і не введе вас у шкідливу звичку, яка згодом викличе горе.


1
Ваша точка не обчислюється в цьому випадку. Люди щодня видаляють речі випадково, резервні копії системи не працюють у випадку домашнього ПК (який є моїм), оскільки ресурси обмежені, переміщення в сміттєвий контейнер є набагато ефективнішим способом обробки цих видалень для мого конкретного використання випадку.
steve

5
@steve ви цілком пропустили бал. rmза визначенням видаляє файл з диска. Він не надсилає його у кошик. Навчити себе користуватися, rmколи ви маєте на увазі відправлення у смітник, вас загрожує катастрофою. Якщо ви хочете відправити у смітник, користуватися rmtrashабо програму, розроблену для роботи, пізніше ви не зіткнетесь з кошмарами. Я не казав, що використання кошика по суті невірно, але якщо ви хочете скористатися ним, не підключайте його до чогось, що не було призначено ним використовувати!
Калеб

2
brew install rmtrashі перестаньте використовуватиrm
GabLeRoux

Це приголомшлива відповідь, прояснила кілька речей для мене. Я спробую сформувати звичку використовувати rmtrashзамість цього rm.
Шехаряр

sudo add-apt-repository ppa: nateshmbhat / rm-trash. Потім встановіть "rm-trash"
Natesh bhat

3

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

Ні на хвилину не віриш, що зміна середовища команд допоможе тобі. Наприклад, ви знайдете людей в Інтернеті скрізь, які рекомендують робити такі речі:

alias rm="rm -i"

або

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

Це не вийде. Період. Є безліч випадків використання, коли ці маленькі прийоми для салону зроблять вас нещасно.

Єдиний надійний спосіб, який я використовував, щоб позбавити себе від небезпеки, - rmце встановити регулярний процес резервного копіювання через крон над каталогами, де я працюю. 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') - це як прив’язати Узі до кухонного ножа: коли-небудь ви отримаєте більше, ніж торгуєтесь, коли підете порізати ананас. Здавання РМ на що-небудь менше, ніж на себе (наприклад alias rm='rmtrash') - це як дозволяти дітям грати з обеззброєними ручними гранатами, а не навчати їх тим, що вони є насправді: коли-небудь, коли вони стикаються з справжнім, вони не ставляться до цього з належною обережністю. У будь-якому випадку - випромінення rm - це погано для вашої особистої безпеки та здоров'я людей!
Калеб

2
Використовувати щось на кшталт safe-rm - розумна порада. Здавання його на rm - ні. Використовуйте його під своїм іменем або унікальним псевдонімом, щоб ви не сприймали як належне запобіжну мережу, яка не завжди буде там.
Калеб

Я бачу вашу думку. Але я зробив це через те, що я працюю з багатьма терміналами .. з деякими віддаленими терміналами та з деякими локальними. І я хочу кинути багато гранат на віддалені термінали, але коли я випадково потягнув на місцевому терміналі запобіжну печатку , я хочу побачити попередження до того, як відбудеться вибух .
Пашаліс

@Paschalis і що станеться, якщо потрібно використовувати сценарій або встановлену програму rm? Крім того, точка Калеба є ще більш вірною - якщо ви звикнете до системи з псевдонімом safe-rm, то, можливо, ви отримаєте нерозважливість з нею і врешті-решт використаєте її в системі з ненадійним RM.
Manishearth
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.