2013-03-19 5 views
0

기본적으로 내가하고있는 일은/servers/폴더 내부의 모든 디렉토리를 가져 와서/media /에 마운트 된 보조 하드 드라이브로 옮깁니다. backupdrive /. 이 스크립트는 하루에 한 번 실행되므로 날짜 이름이있는 디렉토리가 만들어 지므로 폴더를 바로 위에 복사해야합니다 (이 방법으로해야하는 이유는 내 클라이언트가 주 하드 디스크 공간이 제한되어 있기 때문입니다 드라이브와 그의 세계는 각각 6-7gb 정도). 어쨌든, 나는 그 (것)들을/media/backupdrive/currentdate에 폴더를 베끼는 얻을 수있다, 그러나 그 때 그것을 압축하는 것을 시도 할 때, 빈 줄 또는 그 라인을 따라 무언가를 압축 할 수 없다. 이미지에 대한다른 디렉토리에있는 파일을 압축하는 데 문제가 있습니다.

#!bin/bash 
folderName=$(date +"%m-%d-%y") 
mkdir "/media/backupdrive/$folderName" 

for i in servers/*; do 
    cp -rf $i /media/backupdrive/$folderName/ 
    cd /media/backupdrive/$folderName/ 
    tar -C ${i:8} -czvf "${i:8}.tar.gz" 
    cd /root/multicraft/ 
done 

죄송합니다, 그것은 가상 머신에 있었고, 난 복사 및 붙여 넣기 할 수 없기 때문에 나는 그것을 다시 입력에 있었다 :

여기에 코드입니다.

+0

아마도 나는 혼란 스럽지만 아마도'cp -rf servers/$ {i : 8}/... '는 어떻게 작동할까요? 여러분은'servers'의 각 서브 디렉토리에 대해 원래 이름의 하위 문자열 (8 번째 문자로 시작하는) 인 서브 디렉토리를 복사하려고한다고 말합니다. –

+0

나는 단지 시험하고 있었다. 서버/$ {i : 8} /은 $ i와 동일합니다. 나는 단지 그것을 알아 차렸다. $ {i : 8}을 사용하여 디렉토리의 이름을 얻었습니다 (서버 /를 잘라 버릴 것입니다). – user2142183

답변

3

tar 명령에 입력 (예 : 최종 ".")이 누락되어 "tar : 비어있는 아카이브를 만드는 것을 거절합니다"라고 표시됩니다.

스크립트는이 tar 명령과 함께 나를 위해 일을 나타납니다

tar -C ${i#servers/} -czvf "${i#servers/}.tar.gz" . 
1

나는 약간 다른 접근 방식을 시도 할 것입니다. tar 자체는 임시 파일을 사용하지 않으므로 tar 소스를 대상에 직접 연결하여 두 번째 단계에서 gzip을 압축 할 수 있습니다.

#!bin/bash 

dst="/media/backupdrive/$(date +"%m-%d-%y")" 

for d in servers/*; do 
    tarfile="$dst/${d#servers/}.tar" 
    tar -C "$d" -cvf "$tarfile" . 
    gzip -9 "$tarfile" 
done