วิธีลบไฟล์ทั้งหมดยกเว้นไฟล์ใดไฟล์หนึ่งในไดเร็กทอรี

ลบไฟล์ Linux

บางครั้งคุณต้องการ ลบไฟล์เกือบทั้งหมดออกจากไดเร็กทอรีแต่คุณต้องการเก็บไว้อย่างใดอย่างหนึ่งหรือบางส่วน เมื่อมีจำนวนมากการไปทีละคนเป็นงานที่น่าเบื่อ ไม่ใช่ตัวเลือกที่ดีที่สุดมีหลายวิธีในการทำให้งานใน Linux ง่ายขึ้นมากและคุณสามารถกำจัดสิ่งที่คุณต้องการทั้งหมดได้ในคราวเดียว

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

และสิ่งที่ดีที่สุดก็คือ คุณไม่จำเป็นต้องติดตั้งโปรแกรมใด ๆ สามารถทำได้อย่างง่ายดายด้วยคำสั่งเช่น rm และ find นั่นคือโปรแกรมที่ติดตั้งไว้แล้วบน Linux distro ใด ๆ และแน่นอนว่าวิธีนี้จะขึ้นอยู่กับการค้นหารูปแบบและใช้การจับคู่เหล่านั้นเพื่อลบเฉพาะสิ่งที่คุณต้องการ

เพื่อที่จะกำจัดที่นั่น หลายทางเลือก, พวกเขาคืออะไร ...

ลบไฟล์ออกจากไดเร็กทอรีด้วย rm

เพื่อที่จะใช้ไฟล์ คำสั่ง rm ในการกำจัดสิ่งที่คุณรู้สึกคุณต้องรู้ก่อนที่จะระบุรูปแบบ:

  • * (รายการรูปแบบ) - จับคู่การเกิดขึ้นของรูปแบบที่ระบุเป็นศูนย์หรือมากกว่า
  • ? (รายการรูปแบบ) - จับคู่รูปแบบที่ระบุเป็นศูนย์หรือหนึ่งครั้ง
  • + (รายการรูปแบบ) - จับคู่รูปแบบที่ระบุอย่างน้อยหนึ่งเหตุการณ์
  • @ (รายการรูปแบบ) - จับคู่หนึ่งในรูปแบบที่ระบุ
  • ! (รายการแบบ) - จับคู่อะไรก็ได้ยกเว้นหนึ่งในรูปแบบที่กำหนด

ไปยัง เปิดใช้งาน extglob เพื่อให้สามารถใช้งานได้คุณต้องดำเนินการคำสั่งต่อไปนี้ก่อน:

<br data-mce-bogus="1">

shopt -s extglob<br data-mce-bogus="1">

ตา! ฉันไม่ได้ระบุ แต่ถือว่าคุณมีสิทธิ์ในการดำเนินการเหล่านี้และคุณอยู่ในไดเร็กทอรีนั้นเมื่อคุณรันคำสั่ง rm โปรดใช้ความระมัดระวังเนื่องจากหากคุณเรียกใช้ในเส้นทางอื่นคุณอาจต้องลบไฟล์ที่คุณไม่ต้องการ นั่นคือก่อนดำเนินการคำสั่งเหล่านี้ตรวจสอบให้แน่ใจว่าคุณได้ป้อนไดเร็กทอรีที่คุณต้องการด้วย cd

ตอนนี้คุณสามารถใช้ 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


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. รับผิดชอบข้อมูล: AB Internet Networks 2008 SL
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา