ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • xargs
    2011. 8. 30. comments

    xargs 명령어는 standard input으로 들어온 특정 결과를 마치 명령어에 매개변수로 던져주는 역할을 해주는 명령어다.
    리눅스는 작은 개념의 명령어(기능)들을 연결해서 사용하는 것이 철학으로 그 중 다리 역할을 하고 있다고 보면 된다. 


    A | xargs B


    A의 명령어의 출력(standard output)을 파이프라인(|)을 통해서 standard input으로 xargs에게 넘겨준다.  xargs에서는 들어온 결과들의 리스트를 세부리스트로 나눠서  B 명령어의 인자로 넘겨준다.


    EXAMPLES
    이해를 높히기 위해 man 페이지에서 언급되는 사용 예를 보자. 

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


    /tmp 디렉토리에서 파일 이름이 core인것을 찾아서 삭제한다. 
    (찾아진 파일이름을 /bin/rm -f 의 인자로 넘겨받음)
         

    cut -d: -f1 < /etc/passwd | sort | xargs echo


      /etc/passwd의 내용을 읽어서 첫번째 필드의 내용을 정렬하고 그 결과물들을 출력한다.
     (sort된 결과물을 echo의 인자로 넘겨받음) 
     


    Argument list too long 오류일 때, 해결방안으로도 사용된다.
    만약 /path라는 디렉토리의 파일들을 모두 지우기 위한 명령어를 내렸을 때 해당 디렉토리 안의 파일들이 너무 많이 있다면, "Argument list too long"이란 오류 메세지를 내며 실행이 되지 않을 수 있는데

    rm -f /path/*



    다음과 같이 find 의 결과를 rm 의 인자로 넘겨주어 삭제하는 방법으로 문제점을 해결할 수도 있다. xargs는 이 리스트를 세부리스트로 나누면서 각각의 리스트에대해서 rm을 호출한다.

    find /path -type f -print0 | xargs -0 rm



    참고 자료 : http://ko.wikipedia.org/wiki/Xargs


    반응형

    댓글

Designed by Tistory.