วิธีการใช้ Terminal เพื่อลบโฟลเดอร์. svn ทั้งหมดซ้ำ ๆ


56

ฉันสามารถพิมพ์คำสั่งใดลงในเทอร์มินัลเพื่อให้ฉันสามารถลบ.svnโฟลเดอร์ทั้งหมดภายในโฟลเดอร์ (และจากไดเรกทอรีย่อยทั้งหมด) แต่ไม่ลบสิ่งอื่นใด


บางทีคุณอาจจะทำได้svn export path/to/repo path/to/export/toแทน ...
Jonny

สิ่งที่ควรทราบsvn exportคือไม่ได้คัดลอกไฟล์ที่ไม่ใช่ส่วนหนึ่งของ svn ตัวอย่างเช่นฉันต้องการทำสิ่งนี้สำหรับแอปพลิเคชั่น iOS ที่ใช้ Cocoa Pods โดยที่เราไม่ยอมรับโฟลเดอร์ Pods นี่ถูกข้ามไปจากเอาต์พุต ฉันใช้สิ่งที่คล้ายกับคำตอบของ Rich ในสิ่งที่ฉันต้องการ
jackofallcode

คำตอบ:


120
cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
  • ใช้ค้นหาซึ่งจะเรียกซ้ำ
  • ในไดเรกทอรีปัจจุบัน
  • ประเภทไฟล์เป็นไดเรกทอรี
  • ชื่อไฟล์คือ. svn
  • พิมพ์สิ่งที่ตรงกับจุดนี้ (. svn dirs)
  • exec rm -rf (thing found from find)คำสั่ง {} เป็นตัวยึดตำแหน่งสำหรับเอนทิตีที่พบ
  • ที่; บอกว่าพบว่าคำสั่งสำหรับ exec เสร็จแล้ว ตั้งแต่เปลือกยังมีความคิดในสิ่งที่; คือคุณต้องหลบหนีด้วย \ เพื่อที่เชลล์จะไม่ทำอะไรเป็นพิเศษกับมันและเพิ่งผ่านไปเพื่อค้นหา

2
ทางออกที่ดี ในขณะที่findมี-deleteมันจะไม่ลบไดเรกทอรีที่ไม่ว่างเปล่า วิธีนี้สะอาดกว่าเช่นเริ่มต้นจับคู่ส่วนต่าง ๆ ของพา ธ ทั้งหมดของไฟล์
Daniel Beck

13
ฉันขอแนะนำให้ใช้งานโดยไม่มี-exec rm -rf {} \;ครั้งแรกเพื่อให้แน่ใจว่าเป็นเพียงการค้นหาสิ่งที่คุณต้องการ ฉันไม่เคยมีปัญหาในการลบสิ่งผิดปกติโดยไม่ตั้งใจเพราะฉันจะตรวจสอบก่อนเสมอ
Rob

2
@ จุดที่ดีฉันมักจะทำ -exec echo rm -rf {} \; จากนั้นนำเสียงสะท้อนออก
Rich Homolka

ตัวเลือกอื่นหากมีไม่มากเกินไปจะเป็นการยืนยันการลบแต่ละไฟล์ด้วย-exec rm -ri {} \;
doovers

4
-exec rm -rf {} +อาจจะเป็นหลายครั้งเป็นไปอย่างรวดเร็วเพราะมันไม่ได้มีการเปิดตัวมากเกินไปrmกรณี แต่จะบรรจุจำนวนอาร์กิวเมนต์สูงสุด (ไดเรกทอรีที่จะลบในกรณีนี้) ในการโทรครั้งเดียว สิ่งนี้เป็นไปได้เพราะrmยอมรับหลายอาร์กิวเมนต์
Daniel B
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.