°í±Þ Bash ½ºÅ©¸³Æà °¡À̵å: Bash¸¦ ÀÌ¿ëÇÑ ½© ½ºÅ©¸³Æà ¿ÏÀü °¡À̵å | ||
---|---|---|
ÀÌÀü | 12Àå. ¿ÜºÎ ÇÊÅÍ, ÇÁ·Î±×·¥, ¸í·É¾î | ´ÙÀ½ |
-exec COMMAND \;
find°¡ ã¾Æ³½ °¢°¢ÀÇ ÆÄÀÏ¿¡ ´ëÇØ COMMAND¸¦ ½ÇÇàÇÕ´Ï´Ù. COMMAND´Â \;À¸·Î ³¡³ª¾ß ÇÕ´Ï´Ù(find·Î ³Ñ¾î°¡´Â ¸í·É¾îÀÇ ³¡À» ³ªÅ¸³»´Â ;¸¦ ½©ÀÌ Çؼ®ÇÏÁö ¾Êµµ·Ï À̽ºÄÉÀÌÇÁ ½ÃÄÑ¾ß ÇÕ´Ï´Ù). COMMAND¿¡ {}ÀÌ Æ÷ÇԵǾî ÀÖÀ¸¸é ¼±ÅÃµÈ ÆÄÀÏÀ» ¿ÏÀüÇÑ °æ·Î¸íÀ¸·Î ¹Ù²ã ÁÝ´Ï´Ù.
bash$ find ~/ -name '*.txt' /home/bozo/.kde/share/apps/karm/karmdata.txt /home/bozo/misc/irmeyc.txt /home/bozo/test-scripts/1.txt |
find /home/bozo/projects -mtime 1 # /home/bozo/projects µð·ºÅ丮¾È¿¡ ÀÖ´Â ÆÄÀÏÁß¿¡¼ # ÇÏ·ç Àü¿¡ º¯°æµÈ ÆÄÀϵéÀ» ¸ðµÎ º¸¿© ÁÝ´Ï´Ù. |
find /etc -exec grep '[0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*' {} \; # /etc µð·ºÅ丮¿¡ µé¾î ÀÖ´Â ÆÄÀϵ鿡 Æ÷ÇÔµÈ # ¸ðµç IP ÁÖ¼Ò(xxx.xxx.xxx.xxx)¸¦ ã¾ÆÁÝ´Ï´Ù. # IP °¡ ¾Æ´Ñ °Íµµ ³ª¿À´Âµ¥ À̰͵éÀ» ¾î¶»°Ô °É·¯³¾ ¼ö ÀÖÀ»±î¿ä? # ÀÌ°Ç ¾î¶§¿ä? find /etc -type f -exec cat '{}' \; | tr -c '.[:digit:]' '\n' \ | grep '^[^.][^.]*\.[^.][^.]*\.[^.][^.]*\.[^.][^.]*$' # Thanks, S.C. |
°æ°í |
find¿¡¼ ¾²ÀÌ´Â -exec ¿É¼ÇÀ» ½© ³»Àå ¸í·ÉÀÎ exec°ú Çò°¥¸®¸é ¾È µË´Ï´Ù. |
¿¹ 12-2. Badname, ÆÄÀÏ À̸§¿¡ ÀϹÝÀûÀÌÁö ¾ÊÀº ¹®ÀÚ³ª °ø¹é ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ´Â ÆÄÀÏÀ» Áö¿ì±â.
#!/bin/bash # ÇöÀç µð·ºÅ丮¿¡ µé¾î ÀÖ´Â ÆÄÀÏÁß, À̸§¿¡ Á¤»óÀûÀÌÁö ¾ÊÀº ±ÛÀÚ°¡ Æ÷ÇÔµÈ ÆÄÀÏÀ» Áö¿ì±â for filename in * do badname=`echo "$filename" | sed -n /[\+\{\;\"\\\=\?~\(\)\<\>\&\*\|\$]/p` # ÀÌ·± °í¾àÇÑ ±ÛÀÚ¸¦ Æ÷ÇÔÇÏ´Â ÆÄÀϵé: + { ; " \ = ? ~ ( ) < > & * | $ rm $badname 2>/dev/null # ¿¡·¯ ¸Þ¼¼Áö´Â ¹«½Ã. done # ´ÙÀ½Àº ¸ðµç Á¾·ùÀÇ °ø¹é ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ´Â ÆÄÀϵéÀ» ó¸®ÇÏ°Ú½À´Ï´Ù. find . -name "* *" -exec rm -f {} \; # "find"°¡ ãÀº ÆÄÀÏÀ̸§ÀÌ "{}"·Î ¹Ù²ò´Ï´Ù. # '\'¸¦ ½á¼ ';'°¡ ¸í·É¾î ³¡À» ³ªÅ¸³½´Ù´Â ¿ø·¡ÀÇ Àǹ̷ΠÇؼ®µÇ°Ô ÇÕ´Ï´Ù. exit 0 #--------------------------------------------------------------------- # ´ÙÀ½ÀÇ ¸í·É¾îµéÀº À§¿¡¼ "exit"¸¦ Ç߱⠶§¹®¿¡ ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. # À§ ½ºÅ©¸³Æ®ÀÇ ´Ù¸¥ ¹æ¹ý: find . -name '*[+{;"\\=?~()<>&*|$ ]*' -exec rm -f '{}' \; exit 0 # (Thanks, S.C.) |
¿¹ 12-3. inode ·Î ÆÄÀÏÀ» Áö¿ì±â
#!/bin/bash # idelete.sh: inode ·Î ÆÄÀÏÀ» Áö¿ì±â. # ÀÌ ½ºÅ©¸³Æ®´Â ÆÄÀÏÀ̸§ÀÌ ? ³ª - ó·³ ºÎÀûÀýÇÑ ¹®ÀÚ·Î ½ÃÀÛµÉ ¶§ À¯¿ëÇÕ´Ï´Ù. ARGCOUNT=1 # ÀÎÀÚ·Î ÆÄÀÏÀ̸§ÀÌ ÇÊ¿äÇÔ. E_WRONGARGS=70 E_FILE_NOT_EXIST=71 E_CHANGED_MIND=72 if [ $# -ne "$ARGCOUNT" ] then echo "»ç¿ë¹ý: `basename $0` filename" exit $E_WRONGARGS fi if [ ! -e "$1" ] then echo "\""$1"\" ´Â Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏÀÔ´Ï´Ù." exit $E_FILE_NOT_EXIST fi inum=`ls -i | grep "$1" | awk '{print $1}'` # inum = ÆÄÀÏÀÇ inode (index node) # ¸ðµç ÆÄÀÏÀº ÀÚ½ÅÀÇ ¹°¸®Àû ÁÖ¼Ò Á¤º¸¸¦ ´ã°í ÀÖ´Â inode¸¦ °®°í ÀÖ½À´Ï´Ù. echo; echo -n "\"$1\" ¸¦ ÁøÂ¥·Î Áö¿ì½Ç °Ì´Ï±î(y/n)? " read answer case "$answer" in [nN]) echo "¸¶À½À» ¹Ù²å±º¿ä, ±×·¸ÁÒ?" exit $E_CHANGED_MIND ;; *) echo "\"$1\" ¸¦ Áö¿ì´Â Áß.";; esac find . -inum $inum -exec rm {} \; echo ""\"$1"\" °¡ Áö¿öÁ³½À´Ï´Ù!" exit 0 |
½ºÅ©¸³Æ®¿¡¼ find¸¦ »ç¿ëÇÏ´Â ´ÙÀ½ ¿¹Á¦µéÀ» Âü°íÇϼ¼¿ä. ¿¹ 12-22, ¿¹ 4-3, ¿¹ 10-8. ÀÌ º¹ÀâÇÏ°í °·ÂÇÑ ¸í·É¾î¿¡ ´ëÇؼ ´õ ¾Ë°í ½ÍÀ¸¸é ¸ÇÆäÀÌÁö¸¦ »ìÆ캸¼¼¿ä.
¸í·É¾î¿¡ ÀÎÀÚµéÀ» ÇÊÅ͸µÇؼ ³Ñ°Ü ÁÖ°í ±× ¸í·É¾î¸¦ ´Ù½Ã Á¶ÇÕÇÏ´Â µ¥ ¾µ ¼öµµ ÀÖ½À´Ï´Ù. xargs´Â ÀÔ·ÂÀ» ÇÊÅÍ¿ëÀ¸·Î ÀÛ°Ô Á¶°¢³»¼ ¸í·É¾î°¡ ó¸®ÇÏ°Ô ÇØ ÁÝ´Ï´Ù. ¿ªµû¿ÈÇ¥ÀÇ °·ÂÇÑ ´ë¿ëÇ°À̶ó°í »ý°¢ÇÏ¸é µË´Ï´Ù. ¿ªµû¿ÈÇ¥¸¦ ½á¼ too many arguments¶õ ¿¡·¯°¡ ³µÀ» ¶§, xargs·Î ¹Ù²ã ¾²¸é ¼º°øÇÒ ¼öµµ ÀÖ½À´Ï´Ù. º¸ÅëÀº Ç¥ÁØ ÀÔ·ÂÀ̳ª ÆÄÀÌÇÁ¿¡¼ µ¥ÀÌÅ͸¦ ÀÐ¾î µéÀÌÁö¸¸ ÆÄÀÏÀÇ Ãâ·Â¿¡¼µµ ÀÐÀ» ¼ö ÀÖ½À´Ï´Ù.
xargsÀÇ ±âº» ¸í·É¾î´Â echoÀÔ´Ï´Ù.
ls | xargs -p -l gzip Àº ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏ¿¡ ´ëÇØ Çѹø¿¡ ÇÑ ÆÄÀϾ¿ ¹°¾îº¸¸é¼ gzipsÀ¸·Î ¹¾îÁÝ´Ï´Ù.
ÀÛÀº Á¤º¸: Àç¹Õ´Â ¿É¼ÇÁß ÇϳªÀÎ -n XXÀ» ¾²¸é ³Ñ±æ ÀÎÀÚÀÇ °¹¼ö¸¦ XX·Î Á¦ÇÑÇÕ´Ï´Ù.
ls | xargs -n 8 echo ´Â ÇöÀç µð·ºÅ丮ÀÇ ÆÄÀϵéÀ» ÇÑ ÁÙ¿¡ 8 °³¾¿ ²÷¾î¼ º¸¿©ÁÝ´Ï´Ù.
ÀÛÀº Á¤º¸: ´Ù¸¥ À¯¿ëÇÑ ¿É¼ÇÀ¸·Î find -print0³ª grep -lZ¿Í ÇÔ²² ¾²´Â -0ÀÌ ÀÖ½À´Ï´Ù. ÀÌ ¿É¼ÇÀº °ø¹é ¹®ÀÚ³ª µû¿ÈÇ¥°¡ µé¾î°£ ÀÎÀÚ¸¦ ó¸®ÇÒ ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù.
find / -type f -print0 | xargs -0 grep -liwZ GUI | xargs -0 rm -f
grep -rliwZ GUI / | xargs -0 rm -f
À§ÀÇ µÎ °¡Áö ¸ðµÎ "GUI"¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â ¾î¶² ÆÄÀϵµ Áö¿ö ÁÝ´Ï´Ù. (Thanks, S.C.)
¿¹ 12-4. ½Ã½ºÅÛ ·Î±× ¸ð´ÏÅ͸µ¿ë xargs ·Î±× ÆÄÀÏ
#!/bin/bash # ÇöÀç µð·ºÅ丮¿¡ /var/log/messages ÀÇ ³¡ ºÎºÐÀ» Æ÷ÇÔÇÏ´Â ·Î±× ÆÄÀÏÀ» ¸¸µé±â # ÁÖÀÇ: ÀÏ¹Ý »ç¿ëÀÚµµ ÀÌ ½ºÅ©¸³Æ®¸¦ ¾²°Ô ÇÏ·Á¸é # ·çÆ®·Î chmod 644 /var/log/messages ¶ó°í Çؼ # ´©±¸³ª /var/log/messages ¸¦ ÀÐÀ» ¼ö ÀÖ°Ô ÇØ¾ß µË´Ï´Ù. LINES=5 ( date; uname -a ) >>logfile # ½Ã°£°ú ¸Ó½Å À̸§ echo --------------------------------------------------------------------- >>logfile tail -$LINES /var/log/messages | xargs | fmt -s >>logfile echo >>logfile echo >>logfile exit 0 |
¿¹ 12-5. copydir. xargs·Î ÇöÀç µð·ºÅ丮¸¦ ´Ù¸¥ °÷À¸·Î º¹»çÇϱâ
#!/bin/bash # ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏÀ» # ¸í·É¾îÁÙ¿¡¼ ÁöÁ¤ÇÑ µð·ºÅ丮·Î º¹»çÇϱâ(verbose). if [ -z "$1" ] # ÀÎÀÚ°¡ ¾ø´Ù¸é Á¾·á. then echo "»ç¿ë¹ý: `basename $0` directory-to-copy-to" exit 65 fi ls . | xargs -i -t cp ./{} $1 # ¾î¶² ÆÄÀÏÀ̸§¿¡µµ "°ø¹é¹®ÀÚ"°¡ µé¾î ÀÖÁö ¾Ê´Ù¸é # cp * $1 # À̶ó°í Çصµ µ¿ÀÏÇÕ´Ï´Ù. exit 0 |
´Ù¸ñÀû Ç¥Çö½Ä Æò°¡ ¸í·É¾î: ÁÖ¾îÁø ¿¬»ê¿¡ µû¶ó ÀÚµ¿À¸·Î °è»êÇϰųª Æò°¡ÇÕ´Ï´Ù. ÀÌ ¶§, ÀÎÀÚ´Â ºóÄÀ¸·Î ºÐ¸®µÇ¾î¾ß ÇÕ´Ï´Ù. »ê¼ú, ºñ±³, ¹®ÀÚ¿, ³í¸® ¿¬»êµîÀÌ °¡´ÉÇÕ´Ï´Ù.
8 ¸®ÅÏ
2 ¸®ÅÏ
º¯¼ö¸¦ Áõ°¡. let y=y+1 À̳ª y=$(($y+1)) °ú °°À½. ÀÌ°ÍÀº »ê¼ú È®Àå ¿¹Á¦ÀÔ´Ï´Ù.
$stringÀÇ $position¿¡¼ºÎÅÍ $length¸¸ÅÀÇ ¹®ÀÚ¿Á¶°¢(substring)À» ÃßÃâÇØ ³¿.
¿¹ 12-6. expr ¾²±â
#!/bin/bash # 'expr'ÀÇ ¸î°¡Áö »ç¿ë¹ý º¸¿©ÁÖ±â # =============================== echo # »ê¼ú ¿¬»êÀÚ # ---- ------ echo "»ê¼ú ¿¬»êÀÚ" echo a=`expr 5 + 3` echo "5 + 3 = $a" a=`expr $a + 1` echo echo "a + 1 = $a" echo "(º¯¼ö Áõ°¡)" a=`expr 5 % 3` # ³ª¸ÓÁö(modulo) echo echo "5 mod 3 = $a" echo echo # ³í¸® ¿¬»êÀÚ # ---- ------ # ÂüÀ̸é 1, °ÅÁþÀ̸é 0 ¸®ÅÏ. # Bash °ü·Ê¿Í ¹Ý´ëÀÔ´Ï´Ù. echo "³í¸® ¿¬»êÀÚ" echo x=24 y=25 b=`expr $x = $y` # °°Àº °ªÀÎÁö È®ÀÎÇϱâ. echo "b = $b" # 0 ( $x -ne $y ) echo a=3 b=`expr $a \> 10` echo 'b=`expr $a \> 10`, Áï...' echo "If a > 10, b = 0 (°ÅÁþ)" echo "b = $b" # 0 ( 3 ! -gt 10 ) echo b=`expr $a \< 10` echo "If a < 10, b = 1 (Âü)" echo "b = $b" # 1 ( 3 -lt 10 ) echo # ¿¬»êÀÚ¸¦ À̽ºÄÉÀÌÇÁ ½ÃŲ°Í¿¡ ÁÖÀÇ. b=`expr $a \<= 3` echo "If a <= 3, b = 1 (Âü)" echo "b = $b" # 1 ( 3 -le 3 ) # "\>=" ¿¬»êÀÚµµ ÀÖ¾î¿ä(Å©°Å³ª °°À½). echo echo # ºñ±³ ¿¬»êÀÚ # ---- ------ echo "ºñ±³ ¿¬»êÀÚ" echo a=zipper echo "a ´Â $a" if [ `expr $a = snap` ] # º¯¼ö 'a'¸¦ °Á¦·Î ÀçÆò°¡(re-evaluation) then echo "a ´Â zipper °¡ ¾Æ´Ô" fi echo echo # ¹®ÀÚ¿ ¿¬»êÀÚ # ------ ------ echo "¹®ÀÚ¿ ¿¬»êÀÚ" echo a=1234zipper43231 echo "\"$a\" ¸¦ °¡Áö°í Á¶ÀÛÇØ º¸°Ú½À´Ï´Ù." # length: ¹®ÀÚ¿ ±æÀÌ b=`expr length $a` echo "\"$a\" ÀÇ ±æÀÌ´Â $b." # index: ¹®ÀÚ¿¿¡¼ ¹®ÀÚ¿Á¶°¢(substring)ÀÌ ÀÏÄ¡Çϴ ù¹ø° ¹®ÀÚÀÇ À§Ä¡ b=`expr index $a 23` echo "\"$a\" ¿¡¼ \"2\" °¡ ù¹ø°·Î ³ª¿À´Â À§Ä¡´Â \"$b\" ÀÔ´Ï´Ù." # substr: ¹®ÀÚ¿Á¶°¢ ÃßÃâ, ÃßÃâÇÒ ½ÃÀÛ À§Ä¡¿Í ÃßÃâÇÒ ±æÀÌ ÁöÁ¤ b=`expr substr $a 2 6` echo "½ÃÀÛÀ§Ä¡´Â 2ÀÌ°í ±æÀÌ°¡ 6ÀÎ \"$a\" ÀÇ ¹®ÀÚ¿Á¶°¢Àº \"$b\" ÀÔ´Ï´Ù." # 'match' ¿¬»êÀº Á¤±ÔÇ¥Çö½ÄÀ» ¾²´Â 'grep'°ú ºñ½ÁÇÕ´Ï´Ù. b=`expr match "$a" '[0-9]*'` echo \"$a\" ¿¡¼ ¾ÕÂÊ¿¡ ³ª¿À´Â ¼ýÀÚÀÇ °¹¼ö´Â $b ÀÔ´Ï´Ù. b=`expr match "$a" '\([0-9]*\)'` # Áß°ýÈ£°¡ À̽ºÄÉÀÌÇÁµÈ °Í¿¡ ÁÖÀÇÇϼ¼¿ä. echo "\"$a\" ¿¡¼ ¾ÕÂÊ¿¡ ³ª¿À´Â ¼ýÀÚ´Â \"$b\" ÀÔ´Ï´Ù." echo exit 0 |
Áß¿ä: match ´ë½Å : ¿¬»êÀÚ¸¦ ¾µ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, À§ÀÇ ¿¹Á¦¿¡¼ b=`expr $a : [0-9]*` Àº b=`expr match $a [0-9]*` °ú ¿ÏÀüÈ÷ µ¿ÀÏÇÕ´Ï´Ù.
#!/bin/bash echo echo "\"expr $string :\" ¸¦ ¾²´Â ¹®ÀÚ¿ ¿¬»ê" echo "--------------------------------------" echo a=1234zipper43231 echo "\"`expr "$a" : '\(.*\)'`\" ¸¦ °¡Áö°í ¹®ÀÚ¿ ¿¬»êÀ» ÇÕ´Ï´Ù." # À̽ºÄÉÀÌÇÁµÈ ¼Ò°ýÈ£. # Á¤±ÔÇ¥Çö½Ä ÆĽÌ. echo "\"$a\" ÀÇ ±æÀÌ´Â `expr "$a" : '.*'` ÀÔ´Ï´Ù." # ¹®ÀÚ¿ ±æÀÌ echo "\"$a\" ¿¡¼ ¾ÕÂÊ¿¡ ³ª¿À´Â ¼ýÀÚÀÇ °¹¼ö´Â `expr "$a" : '[0-9]*'` ÀÔ´Ï´Ù." echo "\"$a\" ¿¡¼ ¾ÕÂÊ¿¡ ³ª¿À´Â ¼ýÀÚ´Â `expr "$a" : '\([0-9]*\)'` ÀÔ´Ï´Ù." echo exit 0
ÆÞ°ú sed°¡ ´õ ¶Ù¾î³ ¹®ÀÚ¿ ÆÄ½Ì ´É·ÂÀ» °¡Áö°í Àֱ⠶§¹®¿¡ ½ºÅ©¸³Æ®¿¡¼ PerlÀ̳ª sedÀÇ °£´ÜÇÑ "¼ºê·çƾ"À» ¾²´Â °ÍÀÌ exprÀ» ¾²´Â °Í º¸´Ù ´õ ÁÁÀº ¹æ¹ýÀÔ´Ï´Ù.
¹®ÀÚ¿ ¿¬»ê¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ »çÇ×Àº 9.2ÀýÀ» Âü°íÇϼ¼¿ä.