How to remove all files from a directory?

Linux does not use extensions. It is up to the creator of the file to decide whether the name should have an extension. Linux looks at the first few bytes to figure out what kind of file it is dealing with.

  • To remove all non-hidden files* in a directory use:

    rm /path/to/directory/*
    

    However, this will show an error for each sub-directory, because in this mode it is only allowed to delete files.

  • To remove all non-hidden files and sub-directories (along with all of their contents) in a directory use:

    rm -r /path/to/directory/*
    

* Hidden files and directories are those whose names start with . (dot) character, e.g.: .hidden-file or .hidden-directory/. Note that, in Bash, if the dotglob option (which is off by default) is set, rm will act on hidden files too, because they will be included when * is expanded by the shell to provide the list of filename arguments.


  • To remove a folder with all its contents (including all interior folders):

    rm -rf /path/to/directory
    
  • To remove all the contents of the folder (including all interior folders) but not the folder itself:

    rm -rf /path/to/directory/*
    

    or, if you want to make sure that hidden files/directories are also removed:

    rm -rf /path/to/directory/{*,.*}
    
  • To remove all the "files" from inside a folder(not removing interior folders):

    rm -f /path/to/directory/{*,.*}
    

Warning: if you have spaces in your path, make sure to always use quotes.

rm -rf /path/to the/directory/*

is equivalent to 2 separate rm -rf calls:

rm -rf /path/to
rm -rf the/directory/*

To avoid this issue, you can use 'single-quotes'(prevents all expansions, even of shell variables) or "double-quotes"(allows expansion of shell variables, but prevents other expansions):

rm -rf "/path/to the/directory/"*

Where:

  • rm - stands for remove
  • -f - stands for force which is helpful when you don't want to be asked/prompted if you want to remove an archive, for example.
  • -r - stands for recursive which means that you want to go recursively down every folder and remove everything.

To remove all files in directory (including hidden files and subdirectories) run:

rm -rf /path/to/directory/{*,.*}