3 ວິທີການລຶບໄຟລ໌ທັງ ໝົດ ໃນໄດເລກະທໍລີຍົກເວັ້ນ ໜຶ່ງ ຫຼືສອງສາມເອກະສານທີ່ມີສ່ວນຂະຫຍາຍ


ບາງຄັ້ງທ່ານເຂົ້າໄປໃນສະຖານະການທີ່ທ່ານຕ້ອງການລຶບໄຟລ໌ທັງ ໝົດ ໃນໄດເລກະທໍລີຫຼື ທຳ ຄວາມສະອາດໄດເລກະທໍລີໂດຍການລຶບໄຟລ໌ທັງ ໝົດ ຍົກເວັ້ນເອກະສານຂອງປະເພດໃດ ໜຶ່ງ (ສິ້ນສຸດດ້ວຍການຂະຫຍາຍສະເພາະ).

ໃນບົດຄວາມນີ້, ພວກເຮົາຈະສະແດງວິທີການລຶບໄຟລ໌ໃນໄດເລກະທໍລີຍົກເວັ້ນການຂະຫຍາຍເອກະສານຫຼືປະເພດໃດ ໜຶ່ງ ໂດຍໃຊ້ rm, ຊອກຫາແລະ ຄຳ ສັ່ງ globignore.

ກ່ອນທີ່ພວກເຮົາຈະກ້າວຕໍ່ໄປອີກ, ໃຫ້ພວກເຮົາເລີ່ມຕົ້ນໂດຍການເບິ່ງສັ້ນໆກ່ຽວກັບແນວຄວາມຄິດທີ່ ສຳ ຄັນ ໜຶ່ງ ໃນ Linux - filename pattern match, ເຊິ່ງຈະຊ່ວຍໃຫ້ພວກເຮົາສາມາດຈັດການກັບບັນຫາຂອງພວກເຮົາຢູ່ໃນມືໄດ້.

ໃນ Linux, ຮູບແບບຫອຍແມ່ນສາຍທີ່ປະກອບດ້ວຍຕົວອັກສອນພິເສດຕໍ່ໄປນີ້, ເຊິ່ງຖືກເອີ້ນວ່າຕົວ ໜັງ ສືແບບຕົວແທນຫຼືຕົວເຊື່ອມຕໍ່:

<

  • * - ກົງກັບຕົວເລກສູນຫຼືຫຼາຍກວ່າຕົວອັກສອນ
  • ? - ກົງກັບຕົວອັກສອນດຽວ
  • [seq] - ກົງກັບຕົວອັກສອນໃດ ໜຶ່ງ ໃນ seq
  • [! seq] - ກົງກັບຕົວອັກສອນໃດໆທີ່ບໍ່ມີໃນ seq
  • ມີສາມວິທີການທີ່ເປັນໄປໄດ້ທີ່ພວກເຮົາຈະຄົ້ນຫາຢູ່ນີ້, ແລະມັນປະກອບມີ:

    ລຶບໄຟລ໌ໂດຍໃຊ້ຕົວປະຕິບັດການຈັບຄູ່ແບບຂະຫຍາຍ

    ຕົວປະຕິບັດການຈັບຄູ່ແບບຂະຫຍາຍທີ່ແຕກຕ່າງກັນແມ່ນຢູ່ຂ້າງລຸ່ມນີ້, ບ່ອນທີ່ຮູບແບບບັນຊີແມ່ນບັນຊີລາຍຊື່ທີ່ມີ ໜຶ່ງ ຫຼືຫຼາຍກວ່າຊື່, ແຍກອອກໂດຍໃຊ້ຕົວອັກສອນ | :

    <

  • * (ຮູບແບບລາຍການ) - ກົງກັບສູນຫຼືຫຼາຍກວ່ານັ້ນຂອງຮູບແບບທີ່ລະບຸໄວ້
  • ? (ຮູບແບບລາຍການ) - ກົງກັບສູນຫຼື ໜຶ່ງ ທີ່ເກີດຂື້ນຂອງຮູບແບບທີ່ລະບຸໄວ້
  • + (pattern-list) - ກົງກັບການປະກົດຕົວ ໜຶ່ງ ຫຼືຫຼາຍຮູບແບບທີ່ລະບຸໄວ້
  • @ (ຮູບແບບລາຍການ) - ກົງກັບ ໜຶ່ງ ໃນຮູບແບບທີ່ລະບຸໄວ້
  • ! (ຮູບແບບລາຍການ) - ກົງກັບທຸກຢ່າງຍົກເວັ້ນ ໜຶ່ງ ໃນຮູບແບບທີ່ໃຫ້ໄວ້
  • ເພື່ອໃຊ້ພວກມັນ, ເປີດໃຊ້ຕົວເລືອກແກະ extglob ດັ່ງຕໍ່ໄປນີ້:

    # shopt -s extglob
    

    1. ເພື່ອລຶບໄຟລ໌ທັງ ໝົດ ໃນໄດເລກະທໍລີຍົກເວັ້ນຊື່ filename, ໃຫ້ພິມ ຄຳ ສັ່ງຂ້າງລຸ່ມນີ້:

    $ rm -v !("filename")
    

    2. ເພື່ອລຶບໄຟລ໌ທັງ ໝົດ ຍົກເວັ້ນ filename1 ແລະ filename2:

    $ rm -v !("filename1"|"filename2") 
    

    3. ຕົວຢ່າງຂ້າງລຸ່ມນີ້ສະແດງວິທີການເອົາແຟ້ມເອກະສານອື່ນນອກ ເໜືອ ຈາກແຟ້ມ .zip ທັງ ໝົດ ໂຕ້ຕອບ:

    $ rm -i !(*.zip)
    

    4. ຕໍ່ໄປ, ທ່ານສາມາດລຶບແຟ້ມທັງ ໝົດ ໃນໄດເລກະທໍລີນອກຈາກແຟ້ມ .zip ແລະ .odt ທັງ ໝົດ ດັ່ງຕໍ່ໄປນີ້, ໃນຂະນະທີ່ສະແດງສິ່ງທີ່ ກຳ ລັງເຮັດຢູ່:

    $ rm -v !(*.zip|*.odt)
    

    ເມື່ອທ່ານໄດ້ຮັບ ຄຳ ສັ່ງທີ່ ຈຳ ເປັນທັງ ໝົດ ແລ້ວ, ໃຫ້ປິດຕົວເລືອກ extglob shell ດັ່ງນັ້ນ:

    $ shopt -u extglob
    

    ລຶບໄຟລ໌ໂດຍໃຊ້ Linux ຊອກຫາ ຄຳ ສັ່ງ

    ພາຍໃຕ້ວິທີການດັ່ງກ່າວ, ພວກເຮົາສາມາດໃຊ້ ຄຳ ສັ່ງຊອກຫາສະເພາະກັບຕົວເລືອກທີ່ ເໝາະ ສົມຫຼືສົມທົບກັບ ຄຳ ສັ່ງ xargs ໂດຍການໃຊ້ທໍ່ລະບົບດັ່ງໃນຮູບແບບຂ້າງລຸ່ມນີ້:

    $ find /directory/ -type f -not -name 'PATTERN' -delete
    $ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm {}
    $ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm [options] {}
    

    5. ຄຳ ສັ່ງຕໍ່ໄປນີ້ຈະລຶບແຟ້ມທັງ ໝົດ ນອກຈາກ .gz ແຟ້ມຢູ່ໃນໄດເລກະທໍລີປັດຈຸບັນ:

    $ find . -type f -not -name '*.gz'-delete
    

    6. ໂດຍໃຊ້ທໍ່ແລະ xargs, ທ່ານສາມາດດັດແປງກໍລະນີຂ້າງເທິງນີ້:

    $ find . -type f -not -name '*gz' -print0 | xargs -0  -I {} rm -v {}
    

    7. ໃຫ້ພວກເຮົາເບິ່ງຕົວຢ່າງເພີ່ມເຕີມ ໜຶ່ງ, ຄຳ ສັ່ງຂ້າງລຸ່ມນີ້ຈະລຶບໄຟລ໌ທັງ ໝົດ ຍົກເວັ້ນ .gz , .odt , ແລະ .jpg ແຟ້ມເອກະສານ ໃນໄດເລກະທໍລີປັດຈຸບັນ:

    $ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete
    

    ລຶບໄຟລ໌ໂດຍໃຊ້ຕົວປ່ຽນແປງຂອງເບສກີ່

    ແນວທາງສຸດທ້າຍນີ້ຢ່າງໃດກໍ່ຕາມ, ມັນໃຊ້ໄດ້ກັບ bash ເທົ່ານັ້ນ. ທີ່ນີ້, ຕົວປ່ຽນແປງຂອງ GLOBIGNORE ເກັບບັນຊີລາຍຊື່ຮູບແບບທີ່ແຍກເປັນຈໍ້າສອງເມັດ (filenames) ທີ່ຈະບໍ່ສົນໃຈໂດຍການຂະຫຍາຍ pathname.

    ເພື່ອໃຊ້ວິທີການນີ້, ຍ້າຍເຂົ້າໄປໃນໄດເລກະທໍລີທີ່ທ່ານຕ້ອງການເຮັດຄວາມສະອາດ, ຫຼັງຈາກນັ້ນຕັ້ງຄ່າຕົວປ່ຽນທົ່ວໂລກດັ່ງຕໍ່ໄປນີ້:

    $ cd test
    $ GLOBIGNORE=*.odt:*.iso:*.txt
    

    ໃນຕົວຢ່າງນີ້, ໄຟລ໌ທັງ ໝົດ ນອກ ເໜືອ ຈາກ .odt , .iso , ແລະແຟ້ມ .txt ທີ່ຖືກລຶບອອກຈາກໄດເລກະທໍລີປັດຈຸບັນ.

    ຕອນນີ້ດໍາເນີນການຄໍາສັ່ງເພື່ອທໍາຄວາມສະອາດໄດເລກະທໍລີ:

    $ rm -v *
    

    ຫລັງຈາກນັ້ນ, ໃຫ້ປິດຕົວປ່ຽນ GLOBIGNORE:

    $ unset GLOBIGNORE
    

    ໝາຍ ເຫດ: ເພື່ອເຂົ້າໃຈຄວາມ ໝາຍ ຂອງທຸງທີ່ໃຊ້ໃນ ຄຳ ສັ່ງຂ້າງເທິງ, ເບິ່ງ ໜ້າ man ຂອງແຕ່ລະ ຄຳ ສັ່ງທີ່ພວກເຮົາໄດ້ ນຳ ໃຊ້ໃນຮູບແຕ້ມຕ່າງໆ.

    ຫມົດເທົ່ານີ້! ຖ້າທ່ານມີເຕັກນິກບັນຊາເສັ້ນ ຄຳ ສັ່ງອື່ນໆທີ່ຢູ່ໃນໃຈເພື່ອຈຸດປະສົງດຽວກັນ, ຢ່າລືມແບ່ງປັນກັບພວກເຮົາຜ່ານພາກ ຄຳ ເຫັນຂອງພວກເຮົາຂ້າງລຸ່ມນີ້.