3 ວິທີການລຶບໄຟລ໌ທັງ ໝົດ ໃນໄດເລກະທໍລີຍົກເວັ້ນ ໜຶ່ງ ຫຼືສອງສາມເອກະສານທີ່ມີສ່ວນຂະຫຍາຍ
ບາງຄັ້ງທ່ານເຂົ້າໄປໃນສະຖານະການທີ່ທ່ານຕ້ອງການລຶບໄຟລ໌ທັງ ໝົດ ໃນໄດເລກະທໍລີຫຼື ທຳ ຄວາມສະອາດໄດເລກະທໍລີໂດຍການລຶບໄຟລ໌ທັງ ໝົດ ຍົກເວັ້ນເອກະສານຂອງປະເພດໃດ ໜຶ່ງ (ສິ້ນສຸດດ້ວຍການຂະຫຍາຍສະເພາະ).
ໃນບົດຄວາມນີ້, ພວກເຮົາຈະສະແດງວິທີການລຶບໄຟລ໌ໃນໄດເລກະທໍລີຍົກເວັ້ນການຂະຫຍາຍເອກະສານຫຼືປະເພດໃດ ໜຶ່ງ ໂດຍໃຊ້ rm, ຊອກຫາແລະ ຄຳ ສັ່ງ globignore.
ກ່ອນທີ່ພວກເຮົາຈະກ້າວຕໍ່ໄປອີກ, ໃຫ້ພວກເຮົາເລີ່ມຕົ້ນໂດຍການເບິ່ງສັ້ນໆກ່ຽວກັບແນວຄວາມຄິດທີ່ ສຳ ຄັນ ໜຶ່ງ ໃນ Linux - filename pattern match, ເຊິ່ງຈະຊ່ວຍໃຫ້ພວກເຮົາສາມາດຈັດການກັບບັນຫາຂອງພວກເຮົາຢູ່ໃນມືໄດ້.
ໃນ Linux, ຮູບແບບຫອຍແມ່ນສາຍທີ່ປະກອບດ້ວຍຕົວອັກສອນພິເສດຕໍ່ໄປນີ້, ເຊິ່ງຖືກເອີ້ນວ່າຕົວ ໜັງ ສືແບບຕົວແທນຫຼືຕົວເຊື່ອມຕໍ່:
<
*
- ກົງກັບຕົວເລກສູນຫຼືຫຼາຍກວ່າຕົວອັກສອນ ?
- ກົງກັບຕົວອັກສອນດຽວ [seq]
- ກົງກັບຕົວອັກສອນໃດ ໜຶ່ງ ໃນ seq [! seq]
- ກົງກັບຕົວອັກສອນໃດໆທີ່ບໍ່ມີໃນ seq ມີສາມວິທີການທີ່ເປັນໄປໄດ້ທີ່ພວກເຮົາຈະຄົ້ນຫາຢູ່ນີ້, ແລະມັນປະກອບມີ:
ລຶບໄຟລ໌ໂດຍໃຊ້ຕົວປະຕິບັດການຈັບຄູ່ແບບຂະຫຍາຍ
ຕົວປະຕິບັດການຈັບຄູ່ແບບຂະຫຍາຍທີ່ແຕກຕ່າງກັນແມ່ນຢູ່ຂ້າງລຸ່ມນີ້, ບ່ອນທີ່ຮູບແບບບັນຊີແມ່ນບັນຊີລາຍຊື່ທີ່ມີ ໜຶ່ງ ຫຼືຫຼາຍກວ່າຊື່, ແຍກອອກໂດຍໃຊ້ຕົວອັກສອນ |
:
<
* (ຮູບແບບລາຍການ)
- ກົງກັບສູນຫຼືຫຼາຍກວ່ານັ້ນຂອງຮູບແບບທີ່ລະບຸໄວ້ ? (ຮູບແບບລາຍການ)
- ກົງກັບສູນຫຼື ໜຶ່ງ ທີ່ເກີດຂື້ນຂອງຮູບແບບທີ່ລະບຸໄວ້ @ (ຮູບແບບລາຍການ)
- ກົງກັບ ໜຶ່ງ ໃນຮູບແບບທີ່ລະບຸໄວ້ ! (ຮູບແບບລາຍການ)
- ກົງກັບທຸກຢ່າງຍົກເວັ້ນ ໜຶ່ງ ໃນຮູບແບບທີ່ໃຫ້ໄວ້ ເພື່ອໃຊ້ພວກມັນ, ເປີດໃຊ້ຕົວເລືອກແກະ 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 ຂອງແຕ່ລະ ຄຳ ສັ່ງທີ່ພວກເຮົາໄດ້ ນຳ ໃຊ້ໃນຮູບແຕ້ມຕ່າງໆ.
ຫມົດເທົ່ານີ້! ຖ້າທ່ານມີເຕັກນິກບັນຊາເສັ້ນ ຄຳ ສັ່ງອື່ນໆທີ່ຢູ່ໃນໃຈເພື່ອຈຸດປະສົງດຽວກັນ, ຢ່າລືມແບ່ງປັນກັບພວກເຮົາຜ່ານພາກ ຄຳ ເຫັນຂອງພວກເຮົາຂ້າງລຸ່ມນີ້.