"rm -rf" equivalent for Windows?

Viewed 873457

I need a way to recursively delete a folder and its children.

Is there a prebuilt tool for this, or do I need to write one?

DEL /S doesn't delete directories.

DELTREE was removed from Windows 2000+

24 Answers

RMDIR or RD if you are using the classic Command Prompt (cmd.exe):

rd /s /q "path"

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

/S Removes all directories and files in the specified directory in addition to the directory itself. Used to remove a directory tree.

/Q Quiet mode, do not ask if ok to remove a directory tree with /S

If you are using PowerShell you can use Remove-Item (which is aliased to del, erase, rd, ri, rm and rmdir) and takes a -Recurse argument that can be shorted to -r

rd -r "path"

admin:

takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder

Works for anything including sys files

EDIT: I actually found the best way which also solves file path too long problem as well:

mkdir \empty
robocopy /mir \empty folder

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

  • /S Removes all directories and files in the specified directory in addition to the directory itself. Used to remove a directory tree.

  • /Q Quiet mode, do not ask if ok to remove a directory tree with /S

You can install cygwin, which has rm as well as ls etc.

The accepted answer is great, but assuming you have Node installed, you can do this much more precisely with the node library "rimraf", which allows globbing patterns. If you use this a lot (I do), just install it globally.

yarn global add rimraf

then, for instance, a pattern I use constantly:

rimraf .\**\node_modules

or for a one-liner that let's you dodge the global install, but which takes slightly longer for the the package dynamic download:

npx rimraf .\**\node_modules
rm -r -fo <path>

is the closest you can get in Windows PowerShell. It is the abbreviation of

Remove-Item -Recurse -Force -Path <path>

(more details).

As a sidenode:

From the linux version with all subdirs (recursive) + force delete

$ rm -rf ./path

to PowerShell

PS> rm -r -fo ./path

which has the close to same params (just seperated) (-fo is needed, since -f could match different other params)

note:

Remove-Item ALIASE
    ri
    rm
    rmdir
    del
    erase
    rd

in powershell, rm is alias of Remove-Item, so remove a file,

rm -R -Fo the_file

is equivalent to

Remove-Item -R -Fo the_file

if you feel comfortable with gnu rm util, you can the rm util by choco package manager on windows.

install gnu utils in powershell using choco:

choco install GnuWin

finally,

rm.exe -rf the_file

You can install GnuWin32 and use *nix commands natively on windows. I install this before I install anything else on a minty fresh copy of windows. :)

Using Powershell 5.1

 get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force

Replace logs with the directory name you want to delete.

get-childitem searches for the children directory with the name recursively from current path (.).

remove-item deletes the result.

USE AT YOUR OWN RISK. INFORMATION PROVIDED 'AS IS'. NOT TESTED EXTENSIVELY.

Right-click Windows icon (usually bottom left) > click "Windows PowerShell (Admin)" > use this command (with due care, you can easily delete all your files if you're not careful):

rd -r -include *.* -force somedir

Where somedir is the non-empty directory you want to remove.

Note that with external attached disks, or disks with issues, Windows sometimes behaves odd - it does not error in the delete (or any copy attempt), yet the directory is not deleted (or not copied) as instructed. (I found that in this case, at least for me, the command given by @n_y in his answer will produce errors like 'get-childitem : The file or directory is corrupted and unreadable.' as a result in PowerShell)

LATE BUT IMPORTANT ANSWER to anyone who is having troubles installing npm packages on windows machine and if you are seeing error saying "rm -rf..." command not found. You can use the bash cli to run rm command on windows.

for npm users, you can change the npm's config to npm config set script-shell "C:\Program Files\Git\bin\bash.exe" this way if the npm package you are trying to install has a post install script that uses rm -rf command, you will be able to run that rm command without needing to change anything in the npm package or disabling the post install scripts config. (For example, styled-components uses rm command in their post install scripts)

If you want to just use the rm command, you can easily use the bash and pass the arguments.

So yes, you can use the 'rm' command on windows.

In powershell rm -recurse -force works quite well.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Folder\shell\rmdir\command]
@="cmd.exe /s /c rmdir "%V""

Related