Рекурсивно удалить папку 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