เมื่อเร็ว ๆ นี้ฉันได้พบกับงานของการลบไฟล์ / โฟลเดอร์ทั้งหมดในไดเรกทอรียกเว้นที่ตรงกับรูปแบบเฉพาะ ดังนั้นฉันจึงทำคำสั่ง unix บรรทัดเดียวเพื่อทำงาน มันจะต้องเป็นเพียงหนึ่งบรรทัด? ฉันไม่คิด แต่มันก็เย็นกว่านี้แน่ ๆ !
ในขณะที่ปัญหานั้นค่อนข้างเรียบง่าย แต่ฉันก็แปลกใจเล็กน้อยที่ความซับซ้อนในการแก้ปัญหาของฉันสิ้นสุดลง นี่คือคำสั่งที่ฉันใช้ หมายเหตุ: นี่เป็นวิธีการแก้ปัญหาที่ไม่ดีเพราะมันไม่ได้จัดการชื่อไฟล์ที่มีอักขระป้อนบรรทัด (ซึ่งไม่สำคัญในสถานการณ์ของฉัน)
ls | grep -v PATTERN | xargs -n1 -IREPLACE rm -rf REPLACE
ฉันไม่ได้ใช้คำสั่ง "ค้นหา" เพราะฉันไม่ต้องการเรียกเก็บเงินคืนในโฟลเดอร์ที่ตรงกับรูปแบบ ตัวอย่างเช่นพิจารณาโครงสร้างไฟล์ต่อไปนี้:
file_foo.txt
first_dir
|
+--> contents
+--> ...
foo_dir
|
+--> anotherfile.txt
+--> morefiles.log
foo_file.txt
somefile.txt
การใช้รูปแบบ "foo" จะต้องลบ "first_dir" (และเป็นเนื้อหาของหลักสูตร) และ "somefile.txt" ( ไม่ใช่ "anotherfile.txt" หรือ "morefiles.log")
คำถามมีวิธีที่ดีกว่า (ฉลาดกว่าและถูกต้อง) ในการทำสิ่งนี้ให้สำเร็จหรือไม่?
แก้ไข:
เมื่อไม่นานมานี้ข้าพเจ้าได้ทราบว่า "พบ" อาจเป็นตัวเลือกที่ดีกว่า :
find * -maxdepth 0 ! -name PATTERN -print0 | xargs -0n1 rm -rf
โซลูชันนี้จัดการเส้นทางที่มีอักขระป้อนบรรทัดได้อย่างถูกต้อง