Видаліть файл, не запитуючи


85

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


5
rm -f, yes | rmІ так далі, але це відноситься до SU.

4
rmне відображає "видалити звичайний файл?" підказка за замовчуванням. Ви повинні мати його псевдонім rm -iабо визначити як функцію. Я здивований, що псевдонім видно всередині вашого сценарію. Ви виконуєте скрипт ( ./foo.sh) або шукаєте його ( . foo.shабо source foo.sh)?
Кіт Томпсон

Відповіді:


101

Можливо, вам rmпришвидшене rm -iспробувати це:

/bin/rm -f file.log

Щоб побачити псевдоніми, ви можете запустити alias.


7
Крім того, скористайтесь command rm ...або \rm ...пропустіть псевдонім / функцію
glenn jackman

6
Стверджувалося, що rmвідчужувати себе rm -i- це погана ідея. rmКоманда, за замовчуванням, мовчки видаляє файл з ім'ям. Здавши його за допомогою rm -i, ви можете ввійти в звичку не ретельно перевіряти перед натисканням клавіші Enter, залежно від інтерактивного підказки для збереження. Потім ви вводите rm some-important-fileсередовище без псевдоніма.
Кіт Томпсон

@Keith Це дуже правда, я лише особисто псевдонім rm to rm -v
chown

1
Якщо "rm" є функцією (замість псевдоніму), ця відповідь має працювати. І команда bash unsetможе бути цікавою
Xen2050

53

Силовий прапор видаляє всі підказки;

rm -f {file}


2
Це те, що я шукаю, а не прийнята відповідь.
gsamaras

29

Нехай сила буде з тобою - rm -f


5
Я вже схвалив відповідь лайнів, і це точно так само. Лише проголошення почуття гумору
дощ_

Я підтримав і коментар, і відповідь лише тому, що хтось насправді знайшов почуття гумору на SO ...
Mac

5

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


5

Якщо у вас є необхідні дозволи для видалення файлу, і ви не хочете, щоб вам було запропоновано, виконайте наступні дії (-f = force):

rm -f file

Якщо у вас немає дозволів на файл, вам потрібно буде використовувати:

sudo rm -f file

1
"Видалити звичайний файл?" Підсказка означає, що це не проблема дозволів.
Кіт Томпсон

4

yesпрограма неодноразово відповідає так на запити. тож ви можете передавати його в інтерактивну rmпрограму, щоб отримати і бажаний ефект.

yes | rm <filename>

навпаки, якщо ви хочете не робити щось інтерактивне, ви можете це зробити

yes n | <something interactive>

і це повторить «n» у вхідному потоці (ефективно відповідаючи ні на запитання)


Цей yes nваріант не працює для мене. Поки я використовую yes n | rm file.txt, він фактично видаляє файл, навіть якщо файл захищений правом.
iammilind

3
\rm file

Зворотна коса \обходить псевдоніми.


1
"\" - це зворотний проріз, що ви маєте на увазі?
Cand3r

Так, так, використовувати rm без псевдонімів, що призводить до небажаного підтвердження діалогу з префіксом \.
текнопаул

1

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

find -name file.log -delete

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

Так, /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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.