无需询问即可删除文件


89

如何在不询问用户是否同意删除文件的情况下删除文件?我正在编写Shell脚本并使用rm函数,但询问“删除常规文件?”。我真的不需要这个 谢谢。


5
rm -fyes | rm依此类推,但这属于SU。

4
rm没有显示“删除常规文件”?默认提示。您必须将其别名为rm -i或定义为函数。我很惊讶别名在您的脚本中可见。您是执行脚本(./foo.sh)还是采购脚本(. foo.shsource foo.sh)?
基思·汤普森

Answers:


102

您可能已经rm别名了,rm -i所以请尝试以下操作:

/bin/rm -f file.log

要查看别名,可以运行alias


7
或者,使用command rm ...\rm ...跳过别名/功能
glenn jackman 2011年

6
有人争论称,rm别名rm -i是一个坏主意。rm默认情况下,该命令将以静默方式删除命名文件。通过将其别名为rm -i,您可以养成一种习惯,即在按Enter之前不仔细检查,这取决于保存您的交互式提示。然后,您输入rm some-important-file没有别名的环境。
基思·汤普森

@Keith这是真的,我只是将rm别名为rm -v
chown

1
如果“ rm”是一个函数(而不是别名),则此答案应该有效。bash unset命令可能很有趣
Xen2050 2015年


29

愿原力与你同在 - rm -f


5
我已经赞成lynks的答案,这是完全一样的。只是为了幽默感而
投票

我赞成评论和答案,只是因为有人实际上在SO上发现了幽默感……
Mac

5

在Shell脚本中,您想使用它,rm -f <filename>但是您也可以选择-i通过输入unalias rmShell(或配置文件)来摆脱环境的隐式选项。


5

yes程序反复肯定答复任何提示。因此,您也可以将其通过管道rm传递到交互式程序中,以获得所需的效果。

yes | rm <filename>

相反,如果您不想进行交互操作,则可以执行

yes n | <something interactive>

并在输入流上重复“ n”(有效回答问题)


yes n选项对我不起作用。当我使用时yes n | rm file.txt,即使该文件受到了正确的保护,它实际上也会删除该文件。
iammilind

5

如果您具有删除文件所需的权限,并且不想被提示,请执行以下操作(-f =强制):

rm -f file

如果您没有该文件的权限,则需要使用:

sudo rm -f file

1
“删除常规文件?” 提示暗示这不是权限问题。
基思·汤普森

4
\rm file

反斜杠\绕过别名。


1
“ \”是反斜杠,您是什么意思?
Cand3r

是的,使用rm而不使用别名会导致不必要的带有\前缀的确认对话框。
teknopaul

1

除了使用-f参数外,还可以使用find命令代替,例如

find -name file.log -delete

0

当前,我正在一个系统上工作,其中bash shell收到rm命令的定义作为全局配置文件之一中的函数:

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

因此,以上关于别名的答案都没有起作用。为了消除烦人的行为,我在.bashrc文件中未设置rm函数

 unset -f rm

我和开瓶器有类似的问题。但是,我没有找到任何提及rm壳功能隐藏的可能性的答案。因此,我在此处添加了答案,希望对遇到相同类型问题的人有所帮助。

键入内容/bin/rmrm -f所有时间都不方便,并且可能会带来严重的后果(对于rm -f)。


那可能已经解决了您的问题,但无法回答问题。
嫌疑犯2015年

选择的答案不会-打电话/bin/rm吗?如果我在bash中有一个函数,并且在当前目录中有一个具有相同名称的可执行文件,只需./在名称前面添加将调用该文件-而不是函数。PS-我在选定的答案中添加了有关功能的注释unset
Xen2050 2015年

是的,/bin/rm可以。进行unset删除就无需键入完整路径。
daw

0

如果您rm的别名为rm -i,则使用unalias rm;

rm -f除非您确实要删除许多写保护的文件,否则请勿直接使用。必须有一个非常好的使用理由-f

但是,如果您有很多受写保护的文件,则可能更希望rsync -r --delete empty/ removed_dir/更快的速度。


0

我最喜欢的方法是command在bash中使用command,就像使用一样sudo。这将在没有别名的情况下运行您的命令,就像运行它一样/bin/rm(可能rm别名为rm -i)。

例:

command rm -f /tmp/file.txt

0
rm -Rf <folder-to-be-deleted>

-R:递归f:强制,无提示

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.