如何取消rm命令?


9

关于如何撤消已完成的 rm命令,存在很多问题。就我而言,我的公司开始问:“确定要删除此文件吗?”

我需要为每个人确认。代替手动确认“ y / n”:

  1. 在第n个文件被要求输入y / n时,我能否对其余部分设置“是”?(相当于Windows上的“是全部”复选框)(yes | rm在开始之前我知道窍门)

  2. 我可以在第n个文件要求输入y / n时中止操作吗?(除了关闭机器:)


10
只需按ctrl-c并重新启动?顺便说一句,使用-f时,它不会问您任何问题-这是-f的重点。
user253751 '11

您是对的,从我的问题的标题中删除了“ -f”。
Andrejs

Answers:


19

要完成请求1,您将需要使用比yes发送yN次然后再传递键盘输入更多的复杂程序。rm除了总要问(rm -i)或从不问(rm -f)之外,您不能这样做。

您可以随时中止rm通过

  • 按Control-C中断它(发送SIGINT),
  • 按Control-Z将其停止(发送SIGSTOP),然后将其杀死,
  • 发送SIGTERM(kill),或
  • 向其发送SIGKILL(kill -9)。

这不会撤消rm已经执行的任何文件操作,但是它们将阻止它执行任何进一步的文件操作。如果该rm进程当前正在提示用户输入,则它不会主动取消链接任何文件,因此杀死它只会阻止它继续。


什么yes | head -9 | rm...让9(例如)是的?
杰夫·谢勒

2
@JeffSchaller在没有输入的情况下,y / n会升至第9位,但在第10位时,您将无法回答y / n。
casey 2015年

1
一个人可以{ yes | head -n9; yes n; } | rm -i …用来删除前9个文件,然后对其余的文件回答“否”(当然,该{ … }部分可以扩展为涵盖数字的任何可能组合)。
zrajm 2015年

4
...虽然我看不到它可能有什么用。如果您知道要与哪些文件区别/不链接,为什么不将正确的参数传递给rm而不是生成扭曲的,不可靠的命令?
频谱

10

GNU rm support -i,我假设这是您所指的,并要求每个文件进行确认,但是,也-I有所不同:

-I     prompt once before removing  more  than  three  files,  or  when
       removing  recursively.  Less intrusive than -i, while still giv‐
       ing protection against most mistakes

至于启动后是否有可能停止与rm的交互,请点击Ctrl- C应该这样做。


2

使用Ctrl+,c您将可以取消操作。

但是,如果您查看.bashrc文件,则可以注释强制确认的别名,该别名将-iparam用作解释的dhag。

在您体内,.bashrc您会发现一个像这样的条目:

alias rm='rm -i'

如果您发表评论,您的rm -f遗嘱将直接生效


1

在下bash,您可以通过\在命令前添加a 来绕开别名,因此

rm filename

变成

\rm filename

2
我看不到这与我的“如何中断rm过程”问题有什么关系
Andrejs 2015年

@AndreyDoronin它解决了您使用方法的问题,例如在开始之前我就知道yes | rm诀窍
Andrew Henle

@AndreyDoronin>它告诉您,由于问题的原因,如何最终不必问如何中断rm程序
频谱
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.