Видаліть папку node_modules рекурсивно із зазначеного шляху за допомогою командного рядка


92

У мене кілька локальних проектів, збережених у локальному каталозі. Тепер я хочу взяти резервну копію своїх проектів без node_modulesпапки, оскільки вона займає багато місця, і її також можна отримати в будь-який час за допомогою npm install.

Отже, мені потрібно рішення для рекурсивного видалення всіх папок node_modules із зазначеного шляху за допомогою інтерфейсу командного рядка. Будь-які пропозиції / допомога дуже вдячні.

Відповіді:


225

Роздрукуйте список каталогів, які потрібно видалити:

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для кожної.
Тамлин

25

Вдосконалення прийнятої відповіді,

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.