I have multiple npm projects saved in a local directory. Now I want to take backup of my projects without the node_modules
folder, as it is taking a lot of space and can also be retrieved any time using npm install
.
So, I need a solution to delete all node_modules folders recursively from a specified path using the command line interface. Any suggestions/ help is highly appreciable.
Print out a list of directories to be deleted:
find . -name 'node_modules' -type d -prune
Delete directories from the current working directory:
find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +
Alternatively you can use trash (brew install trash
) for staged deletion:
find . -name node_modules -type d -prune -exec trash {} +
Try https://github.com/voidcosmos/npkill
npx npkill
it will find all node_modules and let you remove them.
https://i.stack.imgur.com/B6GlX.gif
Improving on the accepted answer,
find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +
I found that the command would run a very long time to fetch all folders and then run a delete command, to make the command resumable I'd suggest using \;
and to see progress of the command being run use -print
to see the directory being deleted.
Note: You must first cd
into the root directory and then run the command or instead of find .
use find {project_directory}
To delete folders one by one
find . -name 'node_modules' -type d -prune -exec rm -rf '{}' \;
To delete folders one by one and printing the folder being deleted
find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;
Edit:
For the people who like interactive way of doing this refer to @jeckep answer, run this in the directory that you wish to prune.
npx npkill
find . -name 'node_modules' -type d -prune -print -exec bash -c 'rm -rf "$0"/* "$0"/..?* "$0"/.[!.]*' {} \;
The wildcards are for matching hidden files and folders (starting with .) as per unix.stackexchange.com/a/77313/486273
find . -name 'node_modules' -type d -prune -exec lms rm '{}' +
I have come across with this solution,
first find the folder using find and specify name of the folder.
execute delete command recursively -exec rm -rf '{}' +
run the following command to delete folders recursively
find /path -type d -name "node_modules" -exec rm -rf '{}' +
When on Windows, I use the following .BAT
file to delete node_modules
recursively from the current folder:
@for /d /r . %d in (node_modules) do @if exist %d (echo %d && rd %d /s /q)
Or, via CMD.EXE
:
cmd.exe /c "@for /d /r . %d in (node_modules) do @if exist %d (echo %d && rd %d /s /q)"
bash
function to remove node_modules
. It will remove all node_modules
directories recursively from the current working directory, while printing found paths.
You just need to put in somewhere in your $PATH
rmnodemodules(){
find . -name 'node_modules' -type d -prune -exec echo '{}' \; -exec rm -rf {} \;
}
if you want to move instead of delete it:
find . -name 'node_modules' -type d -prune -exec mkdir -p ./another/dir/{} \; -exec mv -i {} ./NODE_MODULES/{} \;
this will keep the directory structure.
OS: Ubuntu
A simple trick to remove all node_modules
in your servers (which can reduce a lot of space) is to run:
sudo find / -not -path "/usr/lib/*" -name 'node_modules' -type d -prune -exec rm -rf '{}' +
Here we need to exclude /usr/lib/*
because if you wont, it will delete your npm
and you need to reinstall it :)
Python Script to Delete the node_modules folder from multiple projects. Just place it in your project folder consisting multiple projects and run it.
import os
import shutil
dirname = '/root/Desktop/proj' #Your Full Path of Projects Folder
dirfiles = os.listdir(dirname)
fullpaths = map(lambda name: os.path.join(dirname, name), dirfiles)
dirs = []
for file in fullpaths:
if os.path.isdir(file): dirs.append(file)
for i in dirs:
dirfiles1 = os.listdir(i)
fullpaths1 = map(lambda name: os.path.join(i, name), dirfiles1)
dirs1 = []
for file in fullpaths1:
if os.path.isdir(file):
dirs1.append(file)
if(file[-12:]=='node_modules'):
shutil.rmtree(file)
print(file)
Success story sharing
-prune
is an important optimization. It'll case find not to recurse intonode_module
directories (to look for nested node_modules)/node_modules/gulp-server-livereload/node_modules: Directory not empty
in a lot of "inner" node_modules folders. How to workaround this?'{}' +
?{}
is a placeholder whichfind
replaces with the file path it found.+
tellsfind
to append all the file paths to a single command rather than runningrm
for each.