Удалить файл, не спрашивая

89

Как я могу удалить файл, не спрашивая пользователя, согласен ли он удалить файл? Я пишу сценарий оболочки и использую функцию rm, но она спрашивает "удалить обычный файл?" и мне действительно это не нужно. Спасибо.

Привет
источник
5
rm -f, yes | rmИ так далее, но это относится к SU.
4
rmне отображается "удалить обычный файл?" подскажите по умолчанию. Вы должны иметь псевдоним rm -iили определить его как функцию. Я удивлен, что псевдоним виден внутри вашего сценария. Вы выполняете скрипт ( ./foo.sh) или получаете его ( . foo.shили source foo.sh)?
Кит Томпсон

Ответы:

103

Вы могли бы дать rmпсевдоним, rm -iчтобы попробовать это:

/bin/rm -f file.log

Чтобы увидеть ваши псевдонимы вы можете запустить alias.

Чаун
источник
7
Кроме того, используйте command rm ...или, \rm ...чтобы пропустить псевдоним / функцию
Гленн Джекман
6
Утверждалось, что иметь rmпсевдоним rm -i- плохая идея. По rmумолчанию команда удаляет указанный файл без вывода сообщений. Присвоив ему псевдоним rm -i, вы можете привыкнуть не проверять внимательно, прежде чем нажимать Enter, в зависимости от интерактивного приглашения вас спасти. Затем вы печатаете rm some-important-fileв среде без псевдонима.
Кит Томпсон
@Keith Это очень верно, я только лично псевдоним rm-rm -v
chown
1
Если «rm» является функцией (вместо псевдонима), этот ответ должен работать. И команда bash unsetможет быть интересной
Xen2050
56

Флаг силы удаляет все запросы;

rm -f {file}

Lynks
источник
2
Это то, что я ищу, а не принятый ответ.
gsamaras
30

Да пребудет с тобой сила - rm -f

manojlds
источник
5
Я уже проголосовал за ответ Линкс, и это точно так же. Просто голосую за чувство юмора
rain_
Я проголосовал как за комментарий, так и за ответ только потому, что кто-то на самом деле нашел чувство юмора на SO ...
Mac
5

В сценарии оболочки вы хотели бы использовать его, rm -f <filename>но у вас также есть возможность избавиться от неявного -iпараметра для вашей среды, введя его unalias rmв оболочку (или профиль).

Мусанниф Захир
источник
unalias rmне работает в CentOS? Amazon Linux?
Suncatcher
5

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

yes | rm <filename>

и наоборот, если вы хотите не делать что-то интерактивное, вы можете сделать

yes n | <something interactive>

и это будет повторять 'n' в потоке ввода (эффективно отвечая на вопросы нет)

mholm815
источник
yes nОпция не работает для меня. Хотя я использую yes n | rm file.txt, он на самом деле удаляет файл, даже если он защищен.
iammilind
5

Если у вас есть необходимые разрешения для удаления файла и вы не хотите, чтобы вам предлагали это сделать, выполните следующее (-f = force):

rm -f file

Если у вас нет прав доступа к файлу, вам нужно будет использовать:

sudo rm -f file
Касым Дорсель
источник
1
"Удалить обычный файл?" Под приглашением подразумевается, что это не проблема с разрешениями.
Кит Томпсон
4
\rm file

Обратная косая черта в \обход псевдонимов.

teknopaul
источник
1
«\» - это обратный слеш, что вы имеете в виду?
Cand3r
Да, использование rm без псевдонимов приводит к появлению нежелательного префикса диалогов с префиксом \.
Текнопаул
1

Помимо использования -fпараметра, findвместо этого вы можете использовать команду, например,

find -name file.log -delete
kenorb
источник
0

В настоящее время я работаю в системе, где оболочка bash получила определение команды rm как функцию в одном из глобальных файлов конфигурации:

 rm  () { /bin/rm -i ${1+"$@"}; }

Следовательно, ни один из приведенных выше ответов относительно псевдонимов не сработал. Чтобы противостоять раздражающему поведению, я отключил функцию rm в своем файле .bashrc

 unset -f rm

У меня была похожая проблема тогда у новичка. Однако я не нашел ответа, в котором упоминалась бы возможность, rmскрытая функцией оболочки. Поэтому я добавил ответ здесь в надежде, что он будет полезен для тех, кто сталкивается с такой же проблемой.

Печатание /bin/rmили rm -fвсе время неудобно, и может иметь плохие последствия (в случае rm -f).

галка
источник
Возможно, это решило вашу проблему, но не отвечает на вопрос.
Подозреваемый
Разве выбранный ответ - вызов не /bin/rmсработает? Если у меня есть функция в bash и исполняемый файл с тем же именем в текущем каталоге, то просто добавление ./перед именем вызовет файл, а не функцию. PS - Я добавил комментарий к выбранному ответу о функции &unset
Xen2050 25.02.15
Да, /bin/rmработает. Выполнение unsetудаления устраняет необходимость ввода полного пути.
галка
0

Если ваш rmпсевдоним rm -i, то используйте unalias rm;

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

Однако, если у вас много защищенных от записи файлов, вы можете предпочесть rsync -r --delete empty/ removed_dir/более быструю скорость.

Чжу Цзиньсюань
источник
0

Мой любимый способ сделать это - просто использовать commandкоманду в bash, точно так же, как вы используете sudo. Это запустит вашу команду без псевдонимов, точно так же, как и при запуске /bin/rm(возможно, rmэто псевдоним rm -i).

Пример:

command rm -f /tmp/file.txt
PatrykMilewski
источник
0
rm -Rf <folder-to-be-deleted>

-R: рекурсивный f: сила, без подсказки

mdivk
источник