In Unix, how do you remove everything in the current directory and below it?
Practice safe computing. Simply go up one level in the hierarchy and don't use a wildcard expression:
cd ..; rm -rf -- <dir-to-remove>
The two dashes --
tell rm
that <dir-to-remove>
is not a command-line option, even when it begins with a dash.
Will delete all files/directories below the current one.
find -mindepth 1 -delete
If you want to do the same with another directory whose name you have, you can just name that
find <name-of-directory> -mindepth 1 -delete
If you want to remove not only the sub-directories and files of it, but also the directory itself, omit -mindepth 1
. Do it without the -delete
to get a list of the things that will be removed.
What I always do is type
rm -rf *
and then hit ESC-*, and bash will expand the * to an explicit list of files and directories in the current working directory.
The benefits are:
- I can review the list of files to delete before hitting ENTER.
- The command history will not contain "rm -rf *" with the wildcard intact, which might then be accidentally reused in the wrong place at the wrong time. Instead, the command history will have the actual file names in there.
- It has also become handy once or twice to answer "wait a second... which files did I just delete?". The file names are visible in the terminal scrollback buffer or the command history.
In fact, I like this so much that I've made it the default behavior for TAB with this line in .bashrc:
bind TAB:insert-completions