I know this will delete everything in a subdirectory and below it:
rm -rf <subdir-name>
But how do you delete everything in the current directory as well as every subdirectory below it and the contents of all of those subdirectories?
I know this will delete everything in a subdirectory and below it:
rm -rf <subdir-name>
But how do you delete everything in the current directory as well as every subdirectory below it and the contents of all of those subdirectories?
What I always do is type
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:
In fact, I like this so much that I've made it the default behavior for TAB with this line in .bashrc:
It is correct that
rm –rf .
will remove everything in the current directly including any subdirectories and their content. The single dot (.
) means the current directory. be carefull not to dorm -rf ..
since the double dot (..
) means the previous directory.This being said, if you are like me and have multiple terminal windows open at the same time, you'd better be safe and use
rm -ir .
Lets look at the command arguments to understand why.First, if you look at the
rm
command man page (man rm
under most Unix) you notice that–r
means "remove the contents of directories recursively". So, doingrm -r .
alone would delete everything in the current directory and everything bellow it.In
rm –rf .
the added -f means "ignore nonexistent files, never prompt". That command deletes all the files and directories in the current directory and never prompts you to confirm you really want to do that.-f
is particularly dangerous if you run the command under a privilege user since you could delete the content of any directory without getting a chance to make sure that's really what you want.On the otherhand, in
rm -ri .
the-i
that replaces the-f
means "prompt before any removal". This means you'll get a chance to say "oups! that's not what I want" before rm goes happily delete all your files.In my early sysadmin days I did an
rm -rf /
on a system while logged with full privileges (root). The result was two days passed a restoring the system from backups. That's why I now employrm -ri
now.Will delete all files/directories below the current one.
If you want to do the same with another directory whose name you have, you can just name that
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.How about:
make sure you are in the correct directory
Use
Update: The
.
stands for current directory, but we cannot use this. The command seems to have explicit checks for.
and..
. Use the wildcard globbing instead. But this can be risky.A safer version IMO is to use:
(this prompts you for confirmation before deleting every file/directory.)