使用rm -i对所有人说“是”


10

说我想确保首先删除正确的文件,所以我做了类似的事情:

rm -i *

只是要确保我对要删除的文件没问题。因此,这将要求我提供每个文件。几个文件之后,假设我意识到这正是我想要删除的文件。取而代之的CTRL+C荷兰国际集团和只是在做rm *,是有办法,我只能说是给所有

这个问题更多是出于好奇而非功能。


奇怪的问题,但是无论如何,让我们在答案中发挥创造力吧!
支石墓

Answers:


8

没有。

(除非您找到一种通过调试器翻转“交互”位的方法。)


[需要引用] :-)
丹尼尔·贝克

6
@Daniel:coreutils/src/remove.c:335coreutils/lib/yesno.c:46(生成)→ rpmatch(3):“对于公认的否定响应(“否”)返回0,对于肯定的肯定响应(“是”)返回1,并且当响应值未被识别时返回-1”
user1686

很不错的发现!
丹尼尔·贝克

3
另外,您可以将大量的y [换行符]粘贴到终端上,这不是“全部同意”,但是会发生相同的情况。
Olli

哈哈对于“ y [linebreak]”这件事是真的,我喜欢它!:)
阿米特(Amit)

9

好吧,这并不能真正回答您的问题。但是不要使用rm -i别名rm,而是考虑别名rm -I

手册页指出:

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

在您的中~/.bashrc,放入:

 alias rm='rm -I'

这实际上很有用!


4

我有办法对所有人说“是”吗?

答案是肯定的,使用以下代码:

$ yes "yes" | rm -vRI directory

  • v:显示已删除文件的列表
  • R:递归删除目录及其内容
  • 我:按照上面的建议。

3

只需先检查使用ls *.bla,然后再检查rm -f *.bla

谨慎使用!


哈哈,确实如此,这是可能的
Amit

3

如果您在屏幕上运行(通常是个好主意),则可以执行以下操作:

ctrl-a : exec .! yes y

这将导致屏幕以y为输出运行“ yes”命令,并将所述输出定向到正在运行的程序(rm -i)。


2

这可以通过动态替换应用程序文件描述符来完成。但是,您将需要一个中间文件。

您可以使用gdb和这样的命名管道(假设您正在使用更多终端,否则必须使用屏幕或其他方式):

  • 使用“ mkfifo myYesYesPipe”创建命名管道
  • 使用rm -i启动交互式副本并找到其PID
  • 打开gdb

然后在gdb中键入以下命令,替换PID

attach rmPID
call open("/path/to/myYesYesPipe",66,0666)
call dup2(3,0)
call close(3)
detach
quit

这将用rm的命名管道替换键盘。

现在您必须填充命名管道

  • 运行是> / path / to / myYesYesPipe

rm将读取管道并覆盖所有内容。


@grawity。您启发了我使用调试器。
大卫·科斯塔

1
  1. 使用将该rm过程置于后台Ctrl+Z
  2. 调出最后一个命令(该rm -i *命令)
  3. 去除 -i
  4. Enter 运行命令
  5. fg %1
  6. Ctrl+C

3
5s/fg/kill/; 6d
user1686 2011年

3
这比用户明确提到的不想做的更好吗?
丹尼尔·贝克
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.