달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

'find'에 해당되는 글 1

  1. 2007.10.01 UNIX의 find command에서 {} \;의 진정한 의미
우리는 UNIX를 쓸 때 find command을 꽤 많이 사용합니다. 예를 들어 현재 directory 및 하위 directory에서 a*.jar라 하는 file을 찾고, 그 file의 permission 및 생성 일자, 크기 등을 알기 위해서 다음과 같이 칩니다.

find . -name a*.jar -exec ls -l {} \;

-exec option 이후 find command으로 찾은 결과로 검색한 file들에 대해 수행하고 싶은 command을 입력하는 것은 알지만, 도데체 {} \;는 뭐하는 개뼉다귀일까요?

1. {}

아주 간단합니다. find command으로 찾은 file 집합을 표현한 것입니다. {와 } 사이에는 공백이 있으면 안됩니다.

2. \;

위에서 언급한 -exec option 뒤의 command은 ;(semicolon)으로 마치게 되어있습니다. 즉 find command은 -exec option을 만나면 그 option부터 ; 사이를 수행할 command으로 인식합니다. 그런데 문제는 ;가 UNIX에서 특수한 의미를 가지는 문자라는 것입니다. UNIX에서는 두 command 이상을 한 줄에 쓸 때, 각 command 사이를 ;로 구분합니다. 즉 UNIX Shell Prompt에서는 아무 생각 없이 ;만 쓰면 exec command 뒤에 다른 command이 나올 것으로 생각을 하지, exec option의 끝으로는 생각을 하지 않는다는 뜻이죠. 이럴 경우 등장하는 것이 바로 \(backslash)로, \ 뒤에 특수문자가 나오면 그 특수문자의 의미를 무시하고 글자 그대로 인식하게 되죠. 그러다 보니 \;라고 쳐야 하는 것입니다.

아, 하나 더! {}와 \; 사이에는 최소한 공백 문자 하나는 들어가 있어야 한답니다. 이 둘 사이를 딱 붙여서 쓰면 안된다는 뜻이죠.

find command에서 -exec option을 쓰면 끄트머리에 꼭 나오는 {} \;의 의미, 이제는 아시겠지요?
:
Posted by 하얀 말