Say I wanted to make sure I'm removing the right files first, so I did something like:

rm -i *

just to make sure that I'm okay with the files that I am removing. So this will ask me for each file. After a few files, suppose I realize it's exactly what I wanted to remove. Instead of CTRL+Cing and just doing rm *, is there a way I can just say Yes to all?

This question comes more so from curiosity rather than functionality.

  • Strange question, but anyway, let's be creative in our answers! – dolmen Mar 26 '11 at 20:45


(Unless you find a way to flip the 'interactive' bit with a debugger.)

| improve this answer | |
  • [citation needed] :-) – Daniel Beck Mar 26 '11 at 20:26
  • 6
    @Daniel: coreutils/src/remove.c:335coreutils/lib/yesno.c:46 (generated) → rpmatch(3): "returns 0 for a recognized negative response ("no"), 1 for a recognized positive response ("yes"), and -1 when the value of response is unrecognized" – user1686 Mar 26 '11 at 20:40
  • Very nice find! – Daniel Beck Mar 26 '11 at 20:45
  • 3
    Also, you can just paste large number of y[line break] to terminal, which is not "Yes to all", but same thing happens. – Olli Mar 26 '11 at 21:22
  • haha true for the 'y[linebreak]' thing, i like it! :) – Amit Mar 31 '11 at 3:53

Well, this doesn't really answer your question. But instead of using rm -i, consider aliasing rm to rm -I:

The man page states:

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

in your ~/.bashrc, put:

 alias rm='rm -I'

this is actually useful!

| improve this answer | |

Is there a way I can just say Yes to all?

The answer is yes, using this code:

$ yes "yes" | rm -vRI directory

  • v: show the list of files that have been removed
  • R: remove directories and their contents recursively
  • I: as per the recommendation above.
| improve this answer | |

Just check first using ls *.bla and then rm -f *.bla maybe?

Use caution!

| improve this answer | |
  • haha true this is a possibility – Amit Mar 31 '11 at 3:51

If you are running in screen (a good idea in general), you can do:

ctrl-a : exec .! yes y

This would cause screen to run the 'yes' command with y being the output, and direct said output to the running program (rm -i).

| improve this answer | |

This can be done by replacing the application file descriptors on the fly. You'll need an intermediate file though.

You can use gdb and a named pipe like this (assuming you are using more terminals, else you have to use screen or something else):

  • create a named pipe with "mkfifo myYesYesPipe"
  • start the interactive copy with rm -i and find its PID
  • open gdb

Then type the following commands in gdb, replacing the PID

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

This replaces the keyboard with a named pipe for rm.

Now you have to fill the named pipe

  • run yes > /path/to/myYesYesPipe

rm will read the pipe and overwrite everything.

| improve this answer | |
  • @grawity. you inspired me to use the debugger. – David Costa Mar 27 '11 at 17:21
  1. Put the rm process in the background with Ctrl+Z.
  2. Recall the last command (the rm -i * command)
  3. Remove the -i
  4. Enter to run the command
  5. fg %1
  6. Ctrl+C
| improve this answer | |
  • 3
    5s/fg/kill/; 6d – user1686 Mar 26 '11 at 20:55
  • 3
    How is this better than what the user explicitly mentioned he doesn't want to do? – Daniel Beck Mar 26 '11 at 20:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.