Рекурсивно удалить папку node_modules по указанному пути с помощью командной строки


92

У меня есть несколько проектов npm, сохраненных в локальном каталоге. Теперь я хочу сделать резервную копию моих проектов без node_modulesпапки, так как она занимает много места и может быть восстановлена ​​в любое время с помощью npm install.

Итак, мне нужно решение для рекурсивного удаления всех папок node_modules по указанному пути с помощью интерфейса командной строки. Любые предложения / помощь очень ценны.

Ответы:


224

Распечатайте список каталогов, которые нужно удалить:

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

Удалите каталоги из текущего рабочего каталога:

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

В качестве альтернативы вы можете использовать trash ( brew install trash) для поэтапного удаления:

find . -name node_modules -type d -prune -exec trash {} +

26
-pruneэто важная оптимизация. Будет обнаружено, что не нужно рекурсивно переходить в node_moduleкаталоги (искать вложенные модули node_modules)
rzymek

1
Для проекта я /node_modules/gulp-server-livereload/node_modules: Directory not emptyиспользую множество «внутренних» папок node_modules. Как это обойти?
josemigallas

15
Это похоже на то, я серьезно, 20-й раз, когда я нахожусь в этом ответе, чтобы скопировать этот код ... xD
Cipi

6
В чем смысл '{}' +?
Rokit

3
{}- это заполнитель, который findзаменяет найденный путь к файлу. +указывает findдобавить все пути к файлам в одну команду, а не запускать rmдля каждой.
Tamlyn

24

Улучшение принятого ответа,

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

Я обнаружил, что команда будет работать очень долго, чтобы получить все папки, а затем запустить команду удаления, чтобы сделать команду возобновляемой, которую я предлагаю использовать, \;и чтобы увидеть ход выполнения команды, используйте, -printчтобы увидеть удаляемый каталог.

Примечание: вы должны сначала cdвойти в корневой каталог, а затем запустить команду или вместо find .использованияfind {project_directory}

Чтобы удалить папки по одной

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

Удаление папок по одной и печать удаляемой папки

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

Редактировать:

Для людей, которым нравится интерактивный способ сделать это, обратитесь к ответу @jeckep, запустите его в каталоге, который вы хотите удалить.

npx npkill

Хорошие улучшения в принятом ответе @Sidharth, очень признательны
nclarx


10

Я столкнулся с этим решением,

  • сначала найдите папку с помощью findи укажите имя папки.
  • рекурсивно выполнить команду удаления -exec rm -rf '{}' +

выполните следующую команду для рекурсивного удаления папок

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


1

bashфункция для удаления node_modules. Он node_modulesрекурсивно удалит все каталоги из текущего рабочего каталога при печати найденных путей.

Вам просто нужно вставить где-нибудь в свой $PATH

rmnodemodules(){

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

}

0

Это действительно хорошо работает

find . -name "node_modules" -exec rm -rf '{}' +

2
Это дубликат предыдущих ответов, только без объяснения.
moopet
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.