{"id":42748,"date":"2026-07-21T13:26:32","date_gmt":"2026-07-21T04:26:32","guid":{"rendered":"https:\/\/jore2.com\/?p=42748"},"modified":"2026-07-21T13:26:32","modified_gmt":"2026-07-21T04:26:32","slug":"community-16859-i-wrote-an-bash-enumerator-because-i-was-sick-of-xargs","status":"publish","type":"post","link":"https:\/\/jore2.com\/?p=42748","title":{"rendered":"xargs \uc9c0\uc625\uc5d0\uc11c \ud0c8\ucd9c\ud55c \uac1c\ubc1c\uc790\ub4e4\uc758 \uc0c8\ub85c\uc6b4 \uc120\ud0dd, bashumerate\uac00 \ub728\ub294 \uc774\uc720"},"content":{"rendered":"<div class=\"jore2-editor-byline\">\n<p><strong>\uc774\uac00\uc740<\/strong><\/p>\n<\/div>\n<p>\ucd5c\uadfc \uac1c\ubc1c\uc790 \ucee4\ubba4\ub2c8\ud2f0\uc5d0\uc11c \ud30c\uc77c \ucc98\ub9ac \ub3c4\uad6c\uc5d0 \ub300\ud55c \uc0c8\ub85c\uc6b4 \ub17c\uc758\uac00 \ud65c\ubc1c\ud558\uac8c \uc624\uac00\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc624\ub7ab\ub3d9\uc548 xargs \uc640 find \uba85\ub839\uc5b4\ub97c \uc870\ud569\ud574 \ud30c\uc77c \ubaa9\ub85d\uc744 \ucc98\ub9ac\ud558\ub358 \ubc29\uc2dd\uc774 \uac00\uc9c4 \ubc88\uac70\ub85c\uc6c0\uc5d0 \ub300\ud55c \ubd88\ub9cc\uc774 \uc313\uc5ec\uac00\ub358 \ucc30\ub098, \uc774\ub97c \ud574\uacb0\ud558\ub824\ub294 \uc0c8\ub85c\uc6b4 \uc2dc\ub3c4\uc778 bashumerate \uac00 \uc8fc\ubaa9\uc744 \ubc1b\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e8\uc21c\ud788 \uba85\ub839\uc5b4\ub97c \uc904\uc774\ub294 \uac83\uc744 \ub118\uc5b4, \ud30c\uc77c \uc774\ub984\uc5d0 \uacf5\ubc31\uc774 \uc788\uac70\ub098 \ud2b9\uc218 \ubb38\uc790\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc5b4\ub3c4 \uc548\uc804\ud558\uac8c \ucc98\ub9ac\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc744 \uc81c\uacf5\ud55c\ub2e4\ub294 \uc810\uc774 \ud070 \ud638\uc751\uc744 \uc5bb\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uae30\uc874\uc758 xargs \ubc29\uc2dd\uc740 \ud30c\uc77c \uc774\ub984\uc5d0 \uacf5\ubc31\uc774\ub098 \uac1c\ud589 \ubb38\uc790\uac00 \ud3ec\ud568\ub418\uba74 \uc758\ub3c4\uce58 \uc54a\uac8c \uba85\ub839\uc5b4\uac00 \uae68\uc9c0\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc558\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ubc29\uc9c0\ud558\uae30 \uc704\ud574 -0 \ud50c\ub798\uadf8\ub97c \uc0ac\uc6a9\ud558\uac70\ub098 NUL \ubb38\uc790\ub85c \uad6c\ubd84\ud558\ub294 \ub4f1\uc758 \ubcf5\uc7a1\ud55c \uc124\uc815\uc744 \uae30\uc5b5\ud574\uc57c\ub9cc \ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub9ce\uc740 \uac1c\ubc1c\uc790\uac00 find \uba85\ub839\uc5b4\uc640 xargs \ub97c \ud568\uaed8 \uc4f8 \ub54c -print0 \uacfc -0 \uc635\uc158\uc744 \ub9e4\ubc88 \uc2e0\uacbd \uc368\uc57c \ud558\ub294 \uac83\uc774 \uadc0\ucc2e\ub2e4\uace0 \ub290\uaf08\uc2b5\ub2c8\ub2e4. \ud2b9\ud788 \ub300\uc6a9\ub7c9 \ud30c\uc77c\uc744 \ucc98\ub9ac\ud558\uac70\ub098 \uc2a4\ud06c\ub9bd\ud2b8 \ub0b4\uc5d0\uc11c \uc790\ub3d9\ud654\ud560 \ub54c \uc774\ub7ec\ud55c \ubcf5\uc7a1\uc131\uc740 \uc2e4\uc218\ub97c \uc720\ubc1c\ud558\ub294 \uc8fc\uc694 \uc6d0\uc778\uc774 \ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>## \uae30\uc874 \ubc29\uc2dd\uc758 \ud55c\uacc4\ub97c \ub118\uc5b4\uc120 \uc0c8\ub85c\uc6b4 \uc811\uadfc\ubc95<\/p>\n<p>\uc774\ub7ec\ud55c \ubc30\uacbd\uc5d0\uc11c \ub4f1\uc7a5\ud55c bashumerate \ub294 \ubc18\ubcf5\ubb38\uc774\ub098 \ubcf5\uc7a1\ud55c \ud50c\ub798\uadf8 \uc5c6\uc774\ub3c4 {} \uae30\ud638\ub97c \ud1b5\ud574 \uc9c1\uad00\uc801\uc73c\ub85c \ud30c\uc77c\uc744 \ucc98\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \uc124\uacc4\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc0ac\uc6a9\uc790\ub294 enumerate -f &#8216;*.sh&#8217; &#8212; wc -l {} \uc640 \uac19\uc774 \uac04\ub2e8\ud55c \uba85\ub839\uc5b4\ub9cc \uc785\ub825\ud558\uba74 \ud30c\uc77c \ubaa9\ub85d\uc744 \uc790\ub3d9\uc73c\ub85c \uc21c\ud68c\ud558\uba70 \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>find -exec \ub098 xargs -I {} \ub97c \uc4f8 \ub54c\ubcf4\ub2e4 \ud6e8\uc52c \uac04\uacb0\ud558\uace0 \uac00\ub3c5\uc131\uc774 \ub192\uc740 \ubb38\ubc95\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \ud2b9\ud788 150 \uc904 \ubbf8\ub9cc\uc758 bash \uc2a4\ud06c\ub9bd\ud2b8\ub85c \uad6c\ud604\ub418\uc5b4 \uc788\uc5b4 \uac00\ubccd\uace0 \ud655\uc7a5\uc131\uc774 \uc88b\ub2e4\ub294 \uc810\ub3c4 \uc7a5\uc810\uc785\ub2c8\ub2e4.<\/p>\n<p>\ud558\ubc84 \ub274\uc2a4 \uac19\uc740 \uae30\uc220 \ucee4\ubba4\ub2c8\ud2f0\uc5d0\uc11c\ub294 \uc774 \ub3c4\uad6c\uc5d0 \ub300\ud574 \ub2e4\uc591\ud55c \uc758\uacac\uc774 \uc624\uac14\uc2b5\ub2c8\ub2e4. \uc77c\ubd80 \uc0ac\uc6a9\uc790\ub294 GNU Parallel \uc774 \uc774\ubbf8 \uac15\ub825\ud55c \ub300\uc548\uc774\ub77c\uace0 \uc9c0\uc801\ud588\uc9c0\ub9cc, Parallel \uc774 \ub108\ubb34 \ubc29\ub300\ud558\uace0 \uc635\uc158\uc774 \ub9ce\uc544 \ubc30\uc6b0\uae30 \uc5b4\ub835\ub2e4\ub294 \ubc18\ub860\ub3c4 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc2e4\uc81c\ub85c Ole Tange \uac00 \uc791\uc131\ud55c GNU Parallel \uc758 \ub300\uc548 \ube44\uad50 \ubb38\uc11c\ub9cc \ubd10\ub3c4 \uc120\ud0dd\uc9c0\uac00 \ub108\ubb34 \ub9ce\uc544 \uc624\ud788\ub824 \ud63c\ub780\uc744 \uc900\ub2e4\ub294 \uc9c0\uc801\uc774 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ubc18\uba74 bashumerate \ub294 \ud2b9\uc815 \ubaa9\uc801\uc5d0 \ub9de\ucdb0 \ub2e8\uc21c\ud558\uac8c \uc124\uacc4\ub418\uc5b4 \uc788\uc5b4 \ucd08\ubcf4\uc790\ub098 \uac00\ubcbc\uc6b4 \uc791\uc5c5\uc744 \ud558\ub294 \uac1c\ubc1c\uc790\uc5d0\uac8c \ub354 \uc801\ud569\ud558\ub2e4\ub294 \ud3c9\uac00\uac00 \uc9c0\ubc30\uc801\uc785\ub2c8\ub2e4.<\/p>\n<p>## \uc2e4\uc81c \ud65c\uc6a9 \uc2dc \uace0\ub824\ud574\uc57c \ud560 \uc810\uacfc \uc8fc\uc758\uc0ac\ud56d<\/p>\n<p>\ubb3c\ub860 \ubaa8\ub4e0 \uc0c1\ud669\uc5d0 \uc774 \ub3c4\uad6c\uac00 \uc644\ubcbd\ud55c \ud574\uacb0\ucc45\uc740 \uc544\ub2d9\ub2c8\ub2e4. \uc2a4\ud06c\ub9bd\ud2b8 \ud30c\uc77c\uc744 \ubc30\ud3ec\ud560 \ub54c bashumerate \uc790\uccb4\ub97c \ud568\uaed8 \uc804\ub2ec\ud574\uc57c \ud55c\ub2e4\ub294 \ubd80\ub2f4\uc774 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub610\ud55c find \uba85\ub839\uc5b4 \uc790\uccb4\uc5d0 \uc774\ubbf8 -delete \uc5f0\uc0b0\uc790\ucc98\ub7fc \ud2b9\uc815 \uc791\uc5c5\uc744 \uc218\ud589\ud558\ub294 \uae30\ub2a5\uc774 \ub0b4\uc7a5\ub418\uc5b4 \uc788\ub294 \uacbd\uc6b0\ub3c4 \uc788\uc5b4, \uad73\uc774 \uc0c8\ub85c\uc6b4 \ub3c4\uad6c\ub97c \ub3c4\uc785\ud560\uc9c0 \uace0\ubbfc\ud574\ubd10\uc57c \ud569\ub2c8\ub2e4. \ud30c\uc77c \uc774\ub984\uc5d0 \uacf5\ubc31\uc774 \uc5c6\ub294 \ud658\uacbd\uc5d0\uc11c\ub294 \uae30\uc874 \ubc29\uc2dd\uc73c\ub85c\ub3c4 \ucda9\ubd84\ud788 \uc791\uc5c5\uc744 \ucc98\ub9ac\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n<p>\ud558\uc9c0\ub9cc \ud30c\uc77c \uc774\ub984\uc5d0 \uacf5\ubc31\uc774\ub098 \ud2b9\uc218 \ubb38\uc790\uac00 \ud3ec\ud568\ub41c \uacbd\uc6b0\uac00 \ube48\ubc88\ud55c \ud604\ub300\uc758 \uac1c\ubc1c \ud658\uacbd\uc5d0\uc11c\ub294 \uc548\uc804\uc131\uc774 \uac00\uc7a5 \uc911\uc694\ud55c \uc694\uc18c\uac00 \ub429\ub2c8\ub2e4. xargs -0 \uc744 \uc0ac\uc6a9\ud558\ub354\ub77c\ub3c4 \uae30\uc5b5\ud558\uc9c0 \ubabb\ud558\uba74 \uc2e4\uc218\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294\ub370, bashumerate \ub294 \ub0b4\ubd80\uc801\uc73c\ub85c NUL-safe \ubc29\uc2dd\uc744 \uae30\ubcf8\uc73c\ub85c \uc801\uc6a9\ud558\uace0 \uc788\uc5b4 \uc0ac\uc6a9\uc790\uac00 \uc2e0\uacbd \uc4f8 \uc77c\uc774 \uc801\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub294 \ud2b9\ud788 \ub85c\uadf8 \ud30c\uc77c \uc815\ub9ac\ub098 \ub300\uc6a9\ub7c9 \ubc31\uc5c5 \uc791\uc5c5\uc5d0\uc11c \ub370\uc774\ud130 \uc190\uc2e4\uc744 \ubc29\uc9c0\ud558\ub294 \ub370 \ud070 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4.<\/p>\n<p>\uc55e\uc73c\ub85c \uc774 \ub3c4\uad6c\uac00 \uc5b4\ub5bb\uac8c \ubc1c\uc804\ud560\uc9c0 \uc8fc\ubaa9\ud574\uc57c \ud560 \uc810\uc740 \ud50c\ub7ec\uadf8\uc778 \ud615\ud0dc\uc758 \uc18c\uc2a4 \uc9c0\uc6d0 \uc5ec\ubd80\uc785\ub2c8\ub2e4. \ud604\uc7ac\ub294 \ud30c\uc77c, \uc904, \ubc94\uc704, \ub9ac\uc2a4\ud2b8 \ub4f1\uc744 \ubaa8\ub450 {} \ubb38\ubc95\uc73c\ub85c \ucc98\ub9ac\ud560 \uc218 \uc788\uc9c0\ub9cc, \ud5a5\ud6c4 \ub354 \ub2e4\uc591\ud55c \uc785\ub825 \uc18c\uc2a4\ub97c \uc9c0\uc6d0\ud560\uc9c0 \uc5ec\ubd80\ub294 \uc0ac\uc6a9\uc790\uc758 \ubc18\uc751\uc5d0 \ub2ec\ub824 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e8\uc21c\ud55c \uc720\ud2f8\ub9ac\ud2f0\ub97c \ub118\uc5b4 \uac1c\ubc1c \uc6cc\ud06c\ud50c\ub85c\uc6b0\uc758 \ud45c\uc900\uc73c\ub85c \uc790\ub9ac \uc7a1\uc744 \uc218 \uc788\uc744\uc9c0\ub294 \uc55e\uc73c\ub85c\uc758 \uc5c5\ub370\uc774\ud2b8\uc640 \ucee4\ubba4\ub2c8\ud2f0\uc758 \uc218\uc6a9\ub3c4\uc5d0 \ub530\ub77c \uacb0\uc815\ub420 \uac83\uc785\ub2c8\ub2e4. \ud30c\uc77c \ucc98\ub9ac\uc758 \ubcf5\uc7a1\uc131\uc744 \uc904\uc774\uace0\uc790 \ud558\ub294 \uac1c\ubc1c\uc790\ub4e4\uc758 \ub2c8\uc988\uac00 \uacc4\uc18d \ucee4\uc9c4\ub2e4\uba74, \uc774 \uac19\uc740 \uacbd\ud5a5\uc740 \ub354 \ub9ce\uc740 \uacbd\ub7c9 \ub3c4\uad6c\uc758 \ub4f1\uc7a5\uc73c\ub85c \uc774\uc5b4\uc9c8 \uac00\ub2a5\uc131\uc774 \ub192\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud30c\uc77c \ucc98\ub9ac\ub97c \uc704\ud574 \ubcf5\uc7a1\ud55c xargs \ud50c\ub798\uadf8\ub97c \uc678\uc6b0\ub290\ub77c \uace0\uc0dd\ud588\ub358 \uac1c\ubc1c\uc790\ub4e4\uc774 \ud558\ub098\uc529 \ubaa8\uc5ec\ub4e4\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub2e8\uc21c\ud55c \ubc18\ubcf5\ubb38\uc744 \ub118\uc5b4 \uc548\uc804\ud55c \ud30c\uc77c \ucc98\ub9ac\ub97c \uc6d0\ud558\ub294 \uc774\ub4e4\uc774 \uc8fc\ubaa9\ud558\ub294 \uc0c8\ub85c\uc6b4 \ub3c4\uad6c bashumerate\uc758 \ub4f1\uc7a5 \ubc30\uacbd\uacfc \uc2e4\uc81c \ud65c\uc6a9 \uac00\uce58\ub97c \uc0b4\ud3b4\ubd05\ub2c8\ub2e4.<\/p>\n","protected":false},"author":4,"featured_media":42747,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[406],"tags":[27400,27397,27398,8007,27399],"class_list":["post-42748","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-406","tag-bash","tag-bashumerate","tag-xargs","tag-8007","tag-27399"],"featured_image_urls":{"full":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/07\/images-jjunyjjuny-post-512f01d0-b6ae-415d-8d81-6b9b4218138b-image.png",745,626,false],"thumbnail":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/07\/images-jjunyjjuny-post-512f01d0-b6ae-415d-8d81-6b9b4218138b-image-150x150.png",150,150,true],"medium":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/07\/images-jjunyjjuny-post-512f01d0-b6ae-415d-8d81-6b9b4218138b-image-300x252.png",300,252,true],"medium_large":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/07\/images-jjunyjjuny-post-512f01d0-b6ae-415d-8d81-6b9b4218138b-image.png",640,538,false],"large":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/07\/images-jjunyjjuny-post-512f01d0-b6ae-415d-8d81-6b9b4218138b-image.png",640,538,false],"1536x1536":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/07\/images-jjunyjjuny-post-512f01d0-b6ae-415d-8d81-6b9b4218138b-image.png",745,626,false],"2048x2048":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/07\/images-jjunyjjuny-post-512f01d0-b6ae-415d-8d81-6b9b4218138b-image.png",745,626,false],"morenews-large":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/07\/images-jjunyjjuny-post-512f01d0-b6ae-415d-8d81-6b9b4218138b-image-745x575.png",745,575,true],"morenews-medium":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/07\/images-jjunyjjuny-post-512f01d0-b6ae-415d-8d81-6b9b4218138b-image-590x410.png",590,410,true]},"author_info":{"info":["\uc774\uac00\uc740"]},"category_info":"<a href=\"https:\/\/jore2.com\/?cat=406\" rel=\"category\">\uc694\uc998\ub728\ub294\uc18c\uc2dd<\/a>","tag_info":"\uc694\uc998\ub728\ub294\uc18c\uc2dd","comment_count":"0","_links":{"self":[{"href":"https:\/\/jore2.com\/index.php?rest_route=\/wp\/v2\/posts\/42748","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jore2.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jore2.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jore2.com\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/jore2.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=42748"}],"version-history":[{"count":0,"href":"https:\/\/jore2.com\/index.php?rest_route=\/wp\/v2\/posts\/42748\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jore2.com\/index.php?rest_route=\/wp\/v2\/media\/42747"}],"wp:attachment":[{"href":"https:\/\/jore2.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=42748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jore2.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=42748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jore2.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=42748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}