Xóa thư mục node_modules một cách đệ quy khỏi một đường dẫn được chỉ định bằng dòng lệnh


92

Tôi có nhiều dự án npm được lưu trong một thư mục cục bộ. Bây giờ tôi muốn sao lưu các dự án của mình mà không có node_modulesthư mục, vì nó chiếm nhiều dung lượng và cũng có thể được truy xuất bất kỳ lúc nào bằng cách sử dụng npm install.

Vì vậy, tôi cần một giải pháp để xóa tất cả các thư mục node_modules một cách đệ quy khỏi một đường dẫn được chỉ định bằng giao diện dòng lệnh. Bất kỳ đề xuất / giúp đỡ là rất đáng giá.

Câu trả lời:


225

In ra danh sách các thư mục sẽ bị xóa:

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

Xóa các thư mục khỏi thư mục làm việc hiện tại:

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

Ngoài ra, bạn có thể sử dụng thùng rác ( brew install trash) để xóa theo giai đoạn:

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

26
-prunelà một tối ưu hóa quan trọng. Nó sẽ tìm trường hợp không recurse vào node_modulethư mục (để nhìn cho node_modules lồng nhau)
rzymek

1
Đối với một dự án, tôi nhận được /node_modules/gulp-server-livereload/node_modules: Directory not emptyrất nhiều thư mục node_modules "bên trong". Làm thế nào để giải quyết vấn đề này?
josemigallas

15
Đây là như thế nào, tôi nói thật đấy, thời gian 20 Tôi ở câu trả lời này để sao chép mã này ... xD
Cipi

6
Ý nghĩa của là '{}' +gì?
Rokit

3
{}là một trình giữ chỗ findthay thế bằng đường dẫn tệp mà nó tìm thấy. +yêu findcầu nối tất cả các đường dẫn tệp vào một lệnh duy nhất thay vì chạy rmcho từng đường dẫn.
Tamlyn

25

Cải thiện câu trả lời được chấp nhận,

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

Tôi thấy rằng lệnh sẽ chạy rất lâu để tìm nạp tất cả các thư mục và sau đó chạy lệnh xóa, để làm cho lệnh có thể tiếp tục, tôi khuyên bạn nên sử dụng \;và để xem tiến trình của lệnh đang chạy, hãy sử dụng -printđể xem thư mục bị xóa.

Lưu ý: Trước tiên bạn phải cdvào thư mục gốc và sau đó chạy lệnh hoặc thay vì find .sử dụngfind {project_directory}

Để xóa từng thư mục một

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

Để xóa từng thư mục một và in thư mục bị xóa

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

Biên tập:

Đối với những người thích cách tương tác để làm điều này, hãy tham khảo câu trả lời @jeckep, chạy câu trả lời này trong thư mục mà bạn muốn lược bớt.

npx npkill

Cải tiến tốt đẹp trên các câu trả lời @Sidharth được chấp nhận, nhiều đánh giá cao
nclarx


10

Tôi đã tìm ra giải pháp này,

  • trước tiên hãy tìm thư mục bằng cách sử dụng findvà chỉ định tên của thư mục.
  • thực hiện lệnh xóa một cách đệ quy -exec rm -rf '{}' +

chạy lệnh sau để xóa các thư mục một cách đệ quy

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


1

bashchức năng loại bỏ node_modules. Nó sẽ loại bỏ tất cả các node_modulesthư mục một cách đệ quy khỏi thư mục làm việc hiện tại, trong khi in các đường dẫn được tìm thấy.

Bạn chỉ cần đặt ở đâu đó trong $PATH

rmnodemodules(){

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

}

0

Điều này thực sự hoạt động tốt

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

2
Đây là bản sao của các câu trả lời trước đó, chỉ không có lời giải thích.
moopet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.