Как я могу удалить файл, не спрашивая пользователя, согласен ли он удалить файл? Я пишу сценарий оболочки и использую функцию rm, но она спрашивает "удалить обычный файл?" и мне действительно это не нужно. Спасибо.
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.
Кроме того, используйте command rm ...или, \rm ...чтобы пропустить псевдоним / функцию
Гленн Джекман
6
Утверждалось, что иметь rmпсевдоним rm -i- плохая идея. По rmумолчанию команда удаляет указанный файл без вывода сообщений. Присвоив ему псевдоним rm -i, вы можете привыкнуть не проверять внимательно, прежде чем нажимать Enter, в зависимости от интерактивного приглашения вас спасти. Затем вы печатаете rm some-important-fileв среде без псевдонима.
Кит Томпсон
@Keith Это очень верно, я только лично псевдоним rm-rm -v
chown
1
Если «rm» является функцией (вместо псевдонима), этот ответ должен работать. И команда bash unsetможет быть интересной
Я уже проголосовал за ответ Линкс, и это точно так же. Просто голосую за чувство юмора
rain_
Я проголосовал как за комментарий, так и за ответ только потому, что кто-то на самом деле нашел чувство юмора на SO ...
Mac
5
В сценарии оболочки вы хотели бы использовать его, rm -f <filename>но у вас также есть возможность избавиться от неявного -iпараметра для вашей среды, введя его unalias rmв оболочку (или профиль).
В настоящее время я работаю в системе, где оболочка 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/более быструю скорость.
Мой любимый способ сделать это - просто использовать commandкоманду в bash, точно так же, как вы используете sudo. Это запустит вашу команду без псевдонимов, точно так же, как и при запуске /bin/rm(возможно, rmэто псевдоним rm -i).
rm -f
,yes | rm
И так далее, но это относится к SU.rm
не отображается "удалить обычный файл?" подскажите по умолчанию. Вы должны иметь псевдонимrm -i
или определить его как функцию. Я удивлен, что псевдоним виден внутри вашего сценария. Вы выполняете скрипт (./foo.sh
) или получаете его (. foo.sh
илиsource foo.sh
)?Ответы:
Вы могли бы дать
rm
псевдоним,rm -i
чтобы попробовать это:Чтобы увидеть ваши псевдонимы вы можете запустить
alias
.источник
command rm ...
или,\rm ...
чтобы пропустить псевдоним / функциюrm
псевдонимrm -i
- плохая идея. Поrm
умолчанию команда удаляет указанный файл без вывода сообщений. Присвоив ему псевдонимrm -i
, вы можете привыкнуть не проверять внимательно, прежде чем нажимать Enter, в зависимости от интерактивного приглашения вас спасти. Затем вы печатаетеrm some-important-file
в среде без псевдонима.unset
может быть интереснойФлаг силы удаляет все запросы;
rm -f {file}
источник
Да пребудет с тобой сила -
rm -f
источник
В сценарии оболочки вы хотели бы использовать его,
rm -f <filename>
но у вас также есть возможность избавиться от неявного-i
параметра для вашей среды, введя егоunalias rm
в оболочку (или профиль).источник
unalias rm
не работает в CentOS? Amazon Linux?yes
программа неоднократно отвечает да на запросы. так что вы можете добавить его в интерактивнуюrm
программу, чтобы получить желаемый эффект.и наоборот, если вы хотите не делать что-то интерактивное, вы можете сделать
и это будет повторять 'n' в потоке ввода (эффективно отвечая на вопросы нет)
источник
yes n
Опция не работает для меня. Хотя я используюyes n | rm file.txt
, он на самом деле удаляет файл, даже если он защищен.Если у вас есть необходимые разрешения для удаления файла и вы не хотите, чтобы вам предлагали это сделать, выполните следующее (-f = force):
Если у вас нет прав доступа к файлу, вам нужно будет использовать:
источник
Обратная косая черта в
\
обход псевдонимов.источник
Помимо использования
-f
параметра,find
вместо этого вы можете использовать команду, например,источник
В настоящее время я работаю в системе, где оболочка bash получила определение команды rm как функцию в одном из глобальных файлов конфигурации:
Следовательно, ни один из приведенных выше ответов относительно псевдонимов не сработал. Чтобы противостоять раздражающему поведению, я отключил функцию rm в своем файле .bashrc
У меня была похожая проблема тогда у новичка. Однако я не нашел ответа, в котором упоминалась бы возможность,
rm
скрытая функцией оболочки. Поэтому я добавил ответ здесь в надежде, что он будет полезен для тех, кто сталкивается с такой же проблемой.Печатание
/bin/rm
илиrm -f
все время неудобно, и может иметь плохие последствия (в случаеrm -f
).источник
/bin/rm
сработает? Если у меня есть функция в bash и исполняемый файл с тем же именем в текущем каталоге, то просто добавление./
перед именем вызовет файл, а не функцию. PS - Я добавил комментарий к выбранному ответу о функции &unset
/bin/rm
работает. Выполнениеunset
удаления устраняет необходимость ввода полного пути.Если ваш
rm
псевдонимrm -i
, то используйтеunalias rm
;Не используйте
rm -f
напрямую, если вы действительно не хотите удалить много файлов, защищенных от записи. Должна быть очень веская причина для использования-f
.Однако, если у вас много защищенных от записи файлов, вы можете предпочесть
rsync -r --delete empty/ removed_dir/
более быструю скорость.источник
Мой любимый способ сделать это - просто использовать
command
команду в bash, точно так же, как вы используетеsudo
. Это запустит вашу команду без псевдонимов, точно так же, как и при запуске/bin/rm
(возможно,rm
это псевдонимrm -i
).Пример:
источник
источник