2016-04-15 2 views
0

Я хочу, чтобы мой день не был разрушен rm -f, но у меня нет самоконтроля, чтобы остановиться. Я хотел бы что-то сделать в моем bashrc, чтобы «rm» игнорировал флаг «-f».Игнорировать флаг из .bashrc

Мои текущие навыки .bashrc (псевдонимы и функции), похоже, не в состоянии решить эту проблему. Если я называю «rm» или заменяю его функцией, я перезаписываю фактическое «rm» и больше не могу удалить что-либо. Что я могу сделать в моем .bashrc, чтобы «rm» игнорировать «-f»?

+1

Вы можете использовать 'command rm', чтобы игнорировать любые функции или псевдонимы с одинаковым именем для доступа к фактической команде на диске' rm'. – chepner

+0

Это только половина проблемы. Из-за какого-либо юридического вызова нет необходимости извлекать '-f'. Вы можете добавить '-i' в конец любых параметров, которые будут переопределять любые предыдущие' -f', но это слишком сильно изменяет маятник на другой конец спектра. – chepner

+0

Я предполагал, что могу получить доступ к списку флагов, передаваемых моей функции, и просто тщательно разобрать «f» s. – dshapiro

ответ

0

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

function rm() { 
    for arg 
    do 
     if [[ $arg == *"f"* ]] && [[ $arg =~ ^-[dfiPRrvW]+$ ]] 
     then 
      echo "rm is trying to -f!" 
      return 1 
     fi 
    done 

    command rm "[email protected]" 
} 

EDIT: изменил код возврата в 1

+1

Возможно, 'return 1', так как это * есть * после того, как все переопределено как ошибка ... – ghoti

+0

А, спасибо. Получил, что перепутал и думал, что 0 - код ошибки. – dshapiro

+1

Еще одна проблема; '- [dfiPRrvW] +' выглядит как извлечение из справочной страницы OSX или FreeBSD. У Linux есть еще несколько опций, у HP/UX есть несколько меньше ...Чтобы быть портативным, вам, вероятно, следует попытаться определить, какие варианты доступны, или вы должны упомянуть, на какой платформе вы ожидаете, что эта функция будет работать лучше всего. – ghoti

0

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

Я мог бы предложить другой подход:
Я правильно решил такие проблемы (случайные удаления), выполнив инкрементную резервную копию над homedirs (и некоторыми другими критическими областями) каждые 10 минут. Это работает очень хорошо, если вы в основном работаете с разработкой или редакцией (от небольших до средних файлов), это не сработает, если вы будете обрабатывать большие мультимедийные файлы или аналогичные. Я исключил Download и Media и .cache из резервной копии. Я использую bacula, который может быть не слишком легким для настройки для новичков, но есть и другие инструменты. Это некоторая работа, чтобы получить эту надлежащую работу, но на протяжении многих лет она избавляла меня от головных болей, которые я считаю целесообразными.
Главное, что необходимо для выполнения этой работы, - это место для хранения резервных копий. Обычно это на другой машине, которая работает как сервер резервного копирования, но для случая случайного удаления она также может быть защищенным файловым пространством на одном компьютере. Сегодня он, возможно, даже может быть в Интернете (но остерегайтесь проблем безопасности).

+0

Я понимаю вашу озабоченность. Моя надежда состоит в том, чтобы фактически прекратить использование -f. Мой скрипт фактически предотвращает удаление, если используется -f. Поэтому каждый раз, когда я использую -f, ничего не будет удалено, и мне придется повторить команду без -f. Я думаю, это должно в конечном итоге пересмотреть меня, чтобы прекратить использовать этот вариант. – dshapiro