ຕົວຢ່າງການນໍາໃຊ້ຂອງຄໍາສັ່ງ "xargs"

ລາຍລະອຽດແລະການນໍາສະເຫນີ

ຄໍາສັ່ງ xargs ຖືກນໍາໃຊ້ໂດຍປົກກະຕິໃນເສັ້ນຄໍາສັ່ງທີ່ຜົນຜະລິດຂອງຫນຶ່ງຄໍາສັ່ງຖືກສົ່ງຜ່ານເປັນການໂຕ້ຖຽງໃສ່ຄໍາສັ່ງອື່ນ.

ໃນຫຼາຍໆກໍລະນີ, ບໍ່ມີຄໍາສັ່ງພິເສດເຊັ່ນ: xargs ສໍາລັບຜົນສໍາເລັດດັ່ງກ່າວເນື່ອງຈາກຜູ້ປະສານງານ "ທໍ່" ແລະ "ການໂອນຍ້າຍ" ປະຕິບັດການປະເພດດຽວກັນ. ຢ່າງໃດກໍ່ຕາມ, ບາງຄັ້ງມີບັນຫາກ່ຽວກັບກົນໄກການເຊື່ອມໂຍງຂັ້ນພື້ນຖານແລະກົນໄກການໂອນຍ້າຍ, ຕົວຢ່າງ, ຖ້າຫາກວ່າການໂຕ້ຖຽງມີຊ່ອງຫວ່າງ, ວ່າ xargs overcomes.

ນອກຈາກນີ້, xargs ກໍານົດຄໍາສັ່ງທີ່ລະບຸໄວ້ repeatedly, ຖ້າຈໍາເປັນ, ເພື່ອປະຕິບັດການໂຕ້ຖຽງທັງຫມົດໃຫ້ມັນ. ໃນຄວາມເປັນຈິງ, ທ່ານສາມາດກໍານົດຈໍານວນການໂຕ້ຖຽງຄວນໄດ້ຮັບການອ່ານອອກຈາກກະແສຂໍ້ມູນປະເພດມາດຕະຖານແຕ່ລະຄັ້ງເມື່ອ xargs ດໍາເນີນການຄໍາສັ່ງທີ່ລະບຸ.

ໂດຍທົ່ວໄປ, ຄໍາສັ່ງ xargs ຄວນຈະຖືກນໍາໃຊ້ຖ້າຄໍາສັ່ງຫນຶ່ງຂອງຄໍາສັ່ງຫນຶ່ງຈະຖືກນໍາໃຊ້ເປັນສ່ວນຫນຶ່ງຂອງຕົວເລືອກຫຼືການໂຕ້ຖຽງຂອງຄໍາສັ່ງທີສອງທີ່ຂໍ້ມູນແມ່ນຖືກສົ່ງຜ່ານ (ໃຊ້ "|"). ທໍ່ປົກກະຕິແມ່ນພຽງພໍຖ້າວ່າຂໍ້ມູນແມ່ນຈຸດປະສົງທີ່ຈະເປັນຂໍ້ມູນ (ມາດຕະຖານ) ຂອງຄໍາສັ່ງທີສອງ.

ຕົວຢ່າງເຊັ່ນຖ້າທ່ານໃຊ້ຄໍາສັ່ງ ls ເພື່ອສ້າງລາຍຊື່ຊື່ໄຟລ໌ແລະລາຍຊື່ແລະຫຼັງຈາກນັ້ນທໍ່ລາຍະການນີ້ເຂົ້າໄປໃນຄໍາສັ່ງ xargs ທີ່ປະຕິບັດ echo , ທ່ານສາມາດລະບຸຈໍານວນຊື່ໄຟລ໌ຫຼືຊື່ໂດເມນທີ່ຖືກປະຕິບັດໂດຍ echo ໃນແຕ່ລະ iteration ດັ່ງຕໍ່ໄປນີ້ :

ls | xargs -n 5 echo

ໃນກໍລະນີນີ້, echo ໄດ້ຮັບຫ້າໄຟລ໌ຫຼືຊື່ໂດເມນໃນເວລາດຽວກັນ. ນັບຕັ້ງແຕ່ echo ເພີ່ມຕົວອັກສອນໃຫມ່ໃນທ້າຍ, ຫ້າຊື່ແມ່ນລາຍລັກອັກສອນໃນແຕ່ລະເສັ້ນ.

ຖ້າທ່ານປະຕິບັດຄໍາສັ່ງທີ່ສົ່ງຄືນບັນດາເລກທີ່ຈໍານວນໃຫຍ່ແລະບໍ່ຄາດເດົາ (ຊື່ໄຟລ໌ເຊັ່ນ) ທີ່ຖືກສົ່ງໄປຫາຄໍາສັ່ງອື່ນເພື່ອການປະຕິບັດຕໍ່ໄປອີກແລ້ວມັນເປັນການດີທີ່ຈະຄວບຄຸມຈໍານວນການໂຕ້ຖຽງທີ່ຄໍາສັ່ງທີສອງໄດ້ຮັບເພື່ອຫຼີກເວັ້ນການ overload ແລະ crashing.

ບັນຊີລາຍການຄໍາສັ່ງດັ່ງຕໍ່ໄປນີ້ແບ່ງສ່ວນນ້ໍາຂອງຊື່ໄຟລ໌ທີ່ສ້າງຂື້ນໂດຍ ຄົ້ນຫາ ກຸ່ມຂອງ 200 ກ່ອນທີ່ຈະສົ່ງໄປຫາຄໍາສັ່ງ cp , ເຊິ່ງສໍາເນົາໃຫ້ເຂົາເຈົ້າເຂົ້າໃນໄດເລກະທໍລີ ສໍາຮອງ .

find / -type f -name "* .txt" -print | xargs-l200-i cp -f {} / backup

ອົງປະກອບ "./" ໃນຄໍາສັ່ງຊອກຫາກໍານົດໄດເລກະທໍລີທີ່ກໍາລັງຈະຖືກຄົ້ນຫາ. ການໂຕ້ຖຽງ "-type f" restricts ການຄົ້ນຫາໄປຍັງໄຟລ໌ແລະ "-tname" * .txt "flag ເຮັດການກັ່ນຕອງຕື່ມສິ່ງທີ່ບໍ່ມີ" extension .txt ". ທົງ -i ໃນ xargs ສັນຍານວ່າ { } ການສະແດງຕົວແທນສະແດງຊື່ໄຟລ໌ຂອງໄອນ້ໍາ.

ຄໍາສັ່ງຕໍ່ໄປນີ້ຊອກຫາໄຟລ໌ທີ່ມີຊື່ຫຼັກຢູ່ໃນຫຼືຢູ່ຂ້າງລຸ່ມນີ້ / tmp ແລະລຶບມັນ.

find / tmp -name core -type f -print | xargs / bin / rm-f

ໃຫ້ສັງເກດວ່ານີ້ຈະເຮັດວຽກບໍ່ຖືກຕ້ອງຖ້າມີຊື່ໄຟລ໌ທີ່ມີ newlines, ວົງຢືມດຽວຫຼືສອງ, ຫຼືສະຖານທີ່. ສະບັບຕໍ່ໄປນີ້ປະມວນຜົນຊື່ໄຟລ໌ໃນແບບທີ່ມີຊື່ໄຟລ໌ຫຼືຊື່ໂດເມນທີ່ມີວົງຢືມດຽວຫຼືສອງ, ຊ່ອງຫວ່າງຫຼືສາຍໃຫມ່ຖືກຈັດການຢ່າງຖືກຕ້ອງ.

find / tmp -name core -type f -print0 | xargs-0 / bin / rm-f

ແທນທີ່ຈະເປັນຕົວເລືອກ -i ທ່ານກໍ່ສາມາດນໍາໃຊ້ -I flag ເຊິ່ງລະບຸ string ທີ່ຖືກແທນທີ່ດ້ວຍ line input ໃນ arguments ຄໍາສັ່ງໃນຕົວຢ່າງນີ້:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

ການທົດແທນຊ່ອຍແນ່ຖືກກໍານົດວ່າ "{}". ນີ້ຫມາຍຄວາມວ່າການເກີດ "{}" ໃນການໂຕ້ຖຽງຄໍາສັ່ງຖືກແທນທີ່ດ້ວຍອົງປະກອບ input ທີ່ສົ່ງຕໍ່ໄປຫາ args ຜ່ານການເຮັດວຽກທໍ່. ນີ້ເຮັດໃຫ້ທ່ານສາມາດຈັດເອົາອົງປະກອບຂອງ input ຢູ່ໃນສະຖານທີ່ສະເພາະໃນການໂຕ້ຖຽງຂອງຄໍາສັ່ງທີ່ຈະຖືກປະຕິບັດ (repeatedly).