커피닉스, 시스템 엔지니어의 쉼터 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
* HanIRC의 #coffeenix 방
[ 장비 및 회선 후원 ]
HOME > Unix/Linux 처음 시작하기 > 명령어 사용하기 도움말
검색 : 사이트 WHOIS 웹서버 종류


  xargs와 tar로 파일 묶을 때 생각할 것 작성일 : 2005/03/16 23:42
 
  • 글쓴이 : 좋은진호 ( http://coffeenix.net/ )
  • 조회수 : 11362
          [ 이전화면 / 수정 ]   비밀번호 :     인쇄용 화면
      제  목 : xargs와 tar로 파일 묶을 때 생각할 것
    글쓴이 : 좋은진호(truefeel, http://coffeenix.net/ )
    글쓴날 : 2004.10
    정리일 : 2005.3.15(화)

    10000개가 넘는 파일 중 a~e로 시작하는 파일 2000여개만 tar로 묶을 때 어떻게 해야할까?
    몇가지 방법을 얘기해보자.

     
    1) tar cvf /BAK/a_e.tar [a-e]*

    2) find . -name "[a-e]*" > list.txt
       tar cvf /BAK/a_e.tar `cat list.txt`


    3) find . -name "[a-e]*" | xargs tar cvf /BAK/a_e.tar
     


    1번째 방법은

    a~e로 시작하는 이라는 아주 간단한 조건이기에 tar 명령만으로도 처리하려고 시도할 수
    있을 것이다. 그러나 여기에 퍼미션이 644인 것이라는 조건이 더 붙는다면 find 명령과의
    조합으로 처리하는게 훨씬 간단할 것이다.
    물론 저 방법을 쓰더라도 인수(argument)가 너무 많다고 에러가 발생할 것이다.

    2번째 방법은

    - a~e로 시작하는 파일목록을 얻어 list.txt로 저장하고
    - list.txt 목록을 통해 a_e.tar 파일명으로 묶는다.

    그러나 cat list.txt 명령으로 넘겨 받은 인수(argument)가 2000여개면 너무 많아 1번 처럼
    에러가 발생할 것이다. 그래서 보통 저 방법보다는 xargs 명령을 통해서 처리를 한다.

    3번째 방법은

    2번보다는 고단수(?)의 방법이다.

    - a~e로 시작하는 파일 목록을 얻어
    - xargs로 넘기면 xargs는 tar로 그 목록을 다시 넘겨
       a_e.tar 파일명으로 묶는다.

    이 방법은 앞의 1,2번의 문제였던 인수가 너무 많다는 에러가 발생하지 않고 정상적으로
    묶어진 것처럼 보인다.

    그러나 tar tvf a_e.tar | wc -l 명령으로 묶어진 파일이 몇 개인지 확인을 해보라.
    원하는 결과가 나왔는가? 전혀 아닐 것이다. 2000여개가 아니고 몇 백개 또는 몇 십개의
    파일만 묶여 있을 것이다.



    이제 해결책을 알아보자.

    해결책 1) xargs의 -n과 -s 옵션을 활용하는 방법

     
    find . -name "[a-e]*" | xargs -n 20000 -s 80000 tar cvf /BAK/a_e.tar
     


    -n 는 최대 인수(argument) 개수를 지정한다.
    -s 는 인수의 최대 문자수를 byte로 지정한다. 기본 20Kbytes.
    파일이 많거나 경로가 길어지면 20Kbytes 로는 턱없이 부족하다.

    위처럼 -n 옵션과 -s 옵션으로 조합으로 파일을 묶을 수 있다.
    20000과 80000이라는 숫자는 넉넉한 임의의 숫자이다.

    해결책 2) tar의 -T 옵션을 사용하는 방법

     
    find . -name "[a-e]*" > list.txt
    tar cvf a_e.tar -T list.txt
     


    목록을 얻어 list.txt로 저장한다. 그리고, tar의 -T옵션은 지정한 파일에서 목록을 얻어
    파일을 묶는다.

    tar의 -T 옵션을 해결하는 것이 xargs의 -n, -s에 이것저것 고민(?)해보고 적당한 숫자를
    지정하는 것보다 사용이 편할 것이다.
      커피닉스 카페 최근 글
    [06/16] [질문]SAN 스위치 브로드케이드 dcx8510-4 장비관련입니다.
    [04/22] Re: 영화속에 컴퓨터 이야기 ~스워드피쉬(2001)
    [10/20] Cross Compiler 깔
    [07/14] SSL АО
    [04/26] Re: 도스화면 원격조종 여부
    [04/25] 도스화면 원격조종 여부
    [10/30] Cshell에서 난수 설정
    [10/23] 공항철도주식회사 SE 구인 件
    [01/26] Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/25] wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/11] 특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
    [08/01] DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
    [05/16] (주)후이즈 시스템엔지니어 (경력자) 모집
    [02/15] [AWS] Cloudfront edge 확인하기
    [01/20] Mobile Service/eCommerce 기업에서 Server / Java / PHP 개발자 구인
      New!   최근에 등록한 페이지
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      오픈캐스케이드 캐드 (OpenCASCADE CAD)
      QCad for Windows --- GNU GPL (Free Software)
      The Hello World Collection
      IPMI를 활용한 리눅스 서버관리
      DNS 설정 검사
      nagiosgraph 설치 방법
      Slony-I 설치 방법 (postgresql replication tool)
      Qmail기반의 Anti spam 시스템 구축하기
      clusterssh

    [ 함께하는 사이트 ]




    운영진 : 좋은진호(truefeel), 야수(yasu), 범냉이, sCag
    2003년 8월 4일~