Exclua a pasta node_modules recursivamente de um caminho especificado usando a linha de comando

100

Tenho vários projetos npm salvos em um diretório local. Agora quero fazer o backup dos meus projetos sem a node_modulespasta, pois está ocupando muito espaço e também pode ser recuperada a qualquer momento usando npm install.

Portanto, preciso de uma solução para excluir todas as pastas node_modules recursivamente de um caminho especificado usando a interface de linha de comando. Qualquer sugestão / ajuda é altamente apreciável.

Sumit
fonte

Respostas:

239

Imprima uma lista de diretórios a serem excluídos:

find . -name 'node_modules' -type d -prune

Exclua diretórios do diretório de trabalho atual:

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +

Como alternativa, você pode usar trash ( brew install trash) para a exclusão em etapas:

find . -name node_modules -type d -prune -exec trash {} +
Darius
fonte
27
-pruneé uma otimização importante. Será encontrado para não recursar nos node_modulediretórios (para procurar node_modules aninhados)
rzymek
1
Para um projeto, eu obtenho /node_modules/gulp-server-livereload/node_modules: Directory not emptymuitas pastas node_modules "internas". Como contornar isso?
josemigallas
15
Isso é tipo, estou falando sério, a 20ª vez que estou nessa resposta para copiar este código ... xD
Cipi
6
Qual é o significado de '{}' +?
Rokit
3
{}é um espaço reservado que findsubstitui o caminho do arquivo encontrado. +diz findpara anexar todos os caminhos de arquivo a um único comando em vez de executar rmpara cada um.
Tamlyn
26

Melhorando a resposta aceita,

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +

Descobri que o comando seria executado por muito tempo para buscar todas as pastas e, em seguida, executar um comando delete, para tornar o comando recuperável, sugiro usar \; e ver o progresso do comando sendo executado, use -printpara ver o diretório sendo excluído.

Nota: Você deve primeiro cdno diretório raiz e, em seguida, executar o comando ou em vez defind . usarfind {project_directory}

Para deletar pastas uma por uma

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' \;

Para excluir pastas uma por uma e imprimir a pasta que está sendo excluída

find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;

Editar:

Para as pessoas que gostam de maneira interativa de fazer isso, consulte a resposta @jeckep, execute-o no diretório que deseja remover.

npx npkill
Sidharth
fonte
Boas melhorias na resposta aceita @Sidharth, muito apreciada
nclarx
11

Eu descobri esta solução,

  • primeiro encontre a pasta usando finde especifique o nome da pasta.
  • execute o comando delete recursivamente -exec rm -rf '{}' +

execute o seguinte comando para deletar pastas recursivamente

find /path -type d -name "node_modules" -exec rm -rf '{}' +

Sumit
fonte
1

Isso funciona muito bem

find . -name "node_modules" -exec rm -rf '{}' +
Ankit Sinha
fonte
2
Esta é uma duplicata das respostas anteriores, mas sem explicação.
moopet
1

bashfunção para remover node_modules. Ele removerá todos os node_modulesdiretórios recursivamente do diretório de trabalho atual, enquanto imprime os caminhos encontrados.

Você só precisa colocar em algum lugar do seu $PATH

rmnodemodules(){

  find . -name 'node_modules' -type d -prune -exec echo '{}' \; -exec rm -rf {} \; 

}
Ivan V.
fonte
0

Quando no Windows, uso o seguinte .BATarquivo para excluir node_modulesrecursivamente da pasta atual:

@for /d /r . %d in (node_modules) do @if exist %d (echo %d && rd %d /s /q) 

Ou via CMD.EXE:

cmd.exe /c "@for /d /r . %d in (node_modules) do @if exist %d (echo %d && rd %d /s /q)"
noseratio
fonte