2010-07-27 4 views
12

필자의 bash fu는 그렇지 않아야합니다.디렉토리 세트를 gzip으로 압축하고 tar 압축 파일을 만듭니다.

디렉토리 목록을 새로운 zip 파일로 복사하는 작은 배치 스크립트를 만들고 싶습니다.

  1. 파일에서 읽기 (config.txt 파일을 말한다) :

    내가 파일 목록을 증명 생각할 수있는 두 가지 방법 (적어도)이 있습니다. 이 파일은 (비록 덜 우아) 첫 번째 옵션은 더 간단 보인다 bash는 스크립트

에 직접 목록을 압축 할 디렉토리의 목록을 포함 또는

  • 하드 코드됩니다. 내가 직면하고

    두 문제는 내가하는 방법을 잘 오전있는 다음

    • 는 디렉토리 목록을 통해 쉘 스크립트에
    • 으로 반복을 디렉토리의 목록을 제공

    누군가가 몇 줄에서 제안 할 수 있습니까? 어떻게 할 수 있습니까? 당신이 bash는 스크립트에서 그렇게 원한다면

    tar czvf mytar.tar.gz dir1 dir2 .. dirN 
    

    과 전달 : BTW

    , 나는 당신이 다음과 같이 명령 줄에서 gzip으로 압축 된 타르를 만들 수 있습니다 우분투 10.0.4에

  • 답변

    24

    를 실행하고 디렉토리를 스크립트에 대한 인수로 사용하면 이러한 인수는 [email protected]이됩니다. 그럼 당신은 :

    tar czvf mytar.tar.gz "[email protected]" 
    

    그 스크립트에있는 경우, 당신은 부를 것이다 (myscript.sh을 말할 수)이 같이

    ./myscript.sh dir1 dir2 .. dirN 
    

    것은 당신이 목록에서 읽고 싶은 경우 (귀하의 옵션 1) 장소에 필요한 모든 디렉토리 (하나 - 파일 목록 :

    tar czvf mytar.tar.gz $(<config.txt) 
    
    +0

    @ 피터 : 당신의 대답을 주셔서 감사합니다 - 내가 할 위치를 거의 저를 가져옵니다. 그러나 나는 게으르다. 명령 줄에서 매번 같은 파일 목록을 입력하고 싶지 않다. (이것은 또한 오류가 발생하기 쉽다) - 왜 내가 스크립트 목록 자체에서 또는 별도로 디렉토리 목록을 '하드 코드'하고 싶은가? 외부 파일에 유지 관리됩니다. 위 명령을 어떻게 수정할 수 있는지 설명해 주시겠습니까? – morpheous

    +0

    sweet !. 그건 내가하고 싶은 것처럼 보입니다. 구문이 꽤 무시 무시 해 보입니다. 나는 bash 프로그래밍 책을 스스로 얻는 편이 좋다 - 빠르다! :) – morpheous

    +0

    @morpheus : 책을 사는 것과 별개로'man bash' (이 경우에는 * Command Substitution * 아래의 섹션)을 읽는 것이 좋습니다. 또한 config.txt가있는 솔루션은 이름에 공백이있는 디렉토리에서는 작동하지 않습니다. –

    0

    두 개의 파일을 생성 : 당신은 (디렉토리 이름에 공백이있는 경우이 작동하지 않습니다)과 같이 그렇게 할 수 단일 선)

    간단한 bash는 스크립트 작성 : 당신은 .... "DIR1 DIR2 DIR3"번호부 = 같은 를 변수를 내보낼 수 있습니다 그리고 스크립트에서이 같은 변수를 사용할 필요가

    #!/bin/bash 
    
    
    for DIR in `cat filelist` 
    do 
        if [ -d $DIR ] 
        then 
         echo $DIR 
        fi 
    done 
    
    0

    파일/디렉토리 이름을 파일에 쓸 때 null 바이트를 구분 기호로 사용하십시오. 이렇게하면 파일 이름에 공백, 개행 문자 등을 걱정할 필요가 없습니다!

    printf "%s\000" */ > listOfDirs.txt # alternative: find ... -print0 
    
    while IFS="" read -r -d '' dir; do command ls -1abd "$dir"; done < listOfDirs.txt 
    
    tar --null -czvf mytar.tar.gz --files-from listOfDirs.txt 
    
    0

    디렉토리를 압축하려는 경우 다음 명령을 사용하십시오.

    pbzip2 compresses directories using parallel implementation

    tar cf <outputfile_name> --use-compress-prog=pbzip2 <directory_name> 
    
    관련 문제