ลบโฟลเดอร์ node_modules แบบวนซ้ำจากเส้นทางที่ระบุโดยใช้บรรทัดคำสั่ง


92

ฉันมีโปรเจ็กต์ npm หลายโปรเจ็กต์ที่บันทึกไว้ในไดเร็กทอรีภายในเครื่อง ตอนนี้ผมต้องการที่จะใช้การสำรองข้อมูลของโครงการของฉันโดยไม่ต้องโฟลเดอร์ราวกับว่ามันคือการใช้พื้นที่มากและยังสามารถเรียกดูได้ตลอดเวลาโดยใช้node_modulesnpm install

ดังนั้นฉันต้องการวิธีแก้ไขเพื่อลบโฟลเดอร์ node_modules ทั้งหมดแบบวนซ้ำจากเส้นทางที่ระบุโดยใช้อินเทอร์เฟซบรรทัดคำสั่ง ข้อเสนอแนะ / ความช่วยเหลือใด ๆ ขอขอบคุณ

คำตอบ:


225

พิมพ์รายการไดเรกทอรีที่จะลบ:

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

ลบไดเร็กทอรีจากไดเร็กทอรีการทำงานปัจจุบัน:

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

หรือคุณสามารถใช้ถังขยะ ( 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 "inner" จำนวนมาก วิธีแก้ปัญหานี้?
josemigallas

15
นี่ก็เหมือนกับว่าฉันจริงจังเป็นครั้งที่ 20 ที่ฉันตอบเพื่อคัดลอกรหัสนี้ ... xD
Cipi

6
ความหมายของ'{}' +อะไร?
Rokit

3
{}เป็นตัวยึดที่findแทนที่ด้วยเส้นทางไฟล์ที่พบ +บอกfindให้ผนวกพา ธ ไฟล์ทั้งหมดเข้ากับคำสั่งเดียวแทนที่จะเรียกใช้rmสำหรับแต่ละไฟล์
Tamlyn

25

ปรับปรุงคำตอบที่ยอมรับ

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

ฉันพบว่าคำสั่งจะใช้เวลานานมากในการดึงโฟลเดอร์ทั้งหมดจากนั้นเรียกใช้คำสั่งลบเพื่อให้คำสั่งกลับมาใช้งานได้ฉันขอแนะนำให้ใช้\;และดูความคืบหน้าของคำสั่งที่กำลังเรียกใช้-printเพื่อดูว่าไดเร็กทอรีถูกลบ

หมายเหตุ: ก่อนอื่นคุณต้องcdเข้าไปในไดเร็กทอรี root จากนั้นจึงรันคำสั่งหรือแทนที่จะ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

bashnode_modulesฟังก์ชั่นที่จะลบ มันจะลบnode_modulesไดเรกทอรีทั้งหมดซ้ำจากไดเร็กทอรีการทำงานปัจจุบันในขณะที่พิมพ์เส้นทางที่พบ

คุณต้องใส่ไว้ในไฟล์ $PATH

rmnodemodules(){

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

}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.