บางครั้งคุณต้องการ ลบไฟล์เกือบทั้งหมดออกจากไดเร็กทอรีแต่คุณต้องการเก็บไว้อย่างใดอย่างหนึ่งหรือบางส่วน เมื่อมีจำนวนมากการไปทีละคนเป็นงานที่น่าเบื่อ ไม่ใช่ตัวเลือกที่ดีที่สุดมีหลายวิธีในการทำให้งานใน Linux ง่ายขึ้นมากและคุณสามารถกำจัดสิ่งที่คุณต้องการทั้งหมดได้ในคราวเดียว
ตัวอย่างเช่นคุณอาจต้องการลบเฉพาะชื่อที่ขึ้นต้นด้วยชื่อที่แน่นอนหรือที่มีนามสกุลเฉพาะเป็นต้น ทั้งหมดที่เป็นไปได้ในความเป็นจริงในโอกาสอื่น ๆ ฉันได้แสดงแบบฝึกหัดที่คล้ายกันใน LxA ไปแล้ว ที่นี่คุณสามารถทำตามบทช่วยสอนทีละขั้นตอนและด้วยวิธีง่ายๆเพื่อให้สามารถลบไฟล์ทั้งหมดที่คุณต้องการได้ยกเว้นสิ่งที่คุณต้องการบันทึก
และสิ่งที่ดีที่สุดก็คือ คุณไม่จำเป็นต้องติดตั้งโปรแกรมใด ๆ สามารถทำได้อย่างง่ายดายด้วยคำสั่งเช่น rm และ find นั่นคือโปรแกรมที่ติดตั้งไว้แล้วบน Linux distro ใด ๆ และแน่นอนว่าวิธีนี้จะขึ้นอยู่กับการค้นหารูปแบบและใช้การจับคู่เหล่านั้นเพื่อลบเฉพาะสิ่งที่คุณต้องการ
เพื่อที่จะกำจัดที่นั่น หลายทางเลือก, พวกเขาคืออะไร ...
ลบไฟล์ออกจากไดเร็กทอรีด้วย rm
เพื่อที่จะใช้ไฟล์ คำสั่ง rm ในการกำจัดสิ่งที่คุณรู้สึกคุณต้องรู้ก่อนที่จะระบุรูปแบบ:
- * (รายการรูปแบบ) - จับคู่การเกิดขึ้นของรูปแบบที่ระบุเป็นศูนย์หรือมากกว่า
- ? (รายการรูปแบบ) - จับคู่รูปแบบที่ระบุเป็นศูนย์หรือหนึ่งครั้ง
- + (รายการรูปแบบ) - จับคู่รูปแบบที่ระบุอย่างน้อยหนึ่งเหตุการณ์
- @ (รายการรูปแบบ) - จับคู่หนึ่งในรูปแบบที่ระบุ
- ! (รายการแบบ) - จับคู่อะไรก็ได้ยกเว้นหนึ่งในรูปแบบที่กำหนด
ไปยัง เปิดใช้งาน extglob เพื่อให้สามารถใช้งานได้คุณต้องดำเนินการคำสั่งต่อไปนี้ก่อน:
<br data-mce-bogus="1"> shopt -s extglob<br data-mce-bogus="1">
ตอนนี้คุณสามารถใช้ rm เพื่อลบสิ่งที่คุณต้องการ ตัวอย่างเช่น, ลบไฟล์ทั้งหมดออกจากไดเร็กทอรียกเว้นไฟล์ที่ตรงกับชื่อ « Lxa »:
rm -v !("lxa")
คุณยังสามารถระบุ ชื่อสองชื่อขึ้นไปที่คุณไม่ต้องการลบ. ตัวอย่างเช่นหากต้องการหลีกเลี่ยงการลบ "lxa" และ "desdelinux":
rm -v !("lxa"|"desdelinux")
คุณสามารถลบไฟล์ทั้งหมด ลบด้วยส่วนขยาย .mp3. ตัวอย่างเช่น:
rm -v !(*.mp3)
ในตอนท้ายคุณสามารถกลับไปที่ ปิดการใช้งาน extglob:
shopt -u extglob
ลบไฟล์ออกจากไดเร็กทอรีด้วย find
อีกทางเลือกหนึ่งสำหรับ rm คือ ใช้ค้นหาเพื่อลบสิ่งที่คุณต้องการ. คุณสามารถใช้ไพพ์และ xargs กับ rm หรือใช้อ็อพชัน -delete เพื่อค้นหา นั่นคือไวยากรณ์ทั่วไปจะเป็น:
find /directory/ -type f -not -name 'PATRÓN' -delete find /directory/ -type f -not -name 'PATRÓN' -print0 | xargs -0 -I {} rm [opciones] {}
ตัวอย่างเช่นจินตนาการว่าคุณต้องการ ลบไฟล์ทั้งหมดในไดเร็กทอรียกเว้นไฟล์ที่มีนามสกุล .jpg คุณสามารถใช้หนึ่งในสองคำสั่งนี้ได้เนื่องจากทั้งสองได้รับผลลัพธ์เดียวกัน:
find . -type f -not -name '*.jpg'-delete find . -type f -not -name '*.jpg' -print0 | xargs -0 -I {} rm -v {}
แต่ถ้าคุณต้องการ เพิ่มรูปแบบพิเศษคุณก็ทำได้เช่นกัน ตัวอย่างเช่นสมมติว่าคุณไม่ต้องการลบ. pdf หรือ. odt ออกจากไดเร็กทอรี:
find . -type f -not \(-name '*pdf' -or -name '*odt' \) -delete
แน่นอนคุณสามารถทำเช่นเดียวกันกับ | และ xargs ตามตัวอย่างก่อนหน้านี้ โดยวิธีการที่เราได้ใช้ - ไม่ปฏิเสธ แต่คุณสามารถลบออกเพื่อทำให้มันเป็นบวกนั่นคือการลบรูปแบบที่ตรงกันและไม่รวมไว้
ลบไฟล์จากไดเร็กทอรีโดยใช้ตัวแปร GLOBIGNORE
ในที่สุดก็มี อีกทางเลือกหนึ่ง เพื่อค้นหาและ rm และใช้ตัวแปรสภาพแวดล้อมเพื่อชี้ไปที่ไฟล์ที่คุณต้องการลบหรือแยกออก ตัวอย่างเช่นสมมติว่าคุณต้องการลบไฟล์ทั้งหมดในไดเร็กทอรีชื่อดาวน์โหลดบันทึกไฟล์. pdf, .mp3 และ. mp4 ในกรณีนี้คุณสามารถดำเนินการดังต่อไปนี้:
cd Descargas GLOBIGNORE=*.pdf:*.mp4:.*mp3 rm -v * unset GLOBIGNORE