tar arquivos de outro diretório sem copiá-los

9

Isso deve ser muito simples para especialistas aqui.

Eu tenho uma conta do Linux com uma cota de disco de apenas 6 GB. Existe alguma pasta de dados em /opt com cerca de 3GB de dados quando a compressão é de 1GB. Existem alguns links simbólicos dentro de data-folder . Normalmente, para fazer um backup de trabalho, costumava fazer o seguinte.

cp -rvfL /opt/data-folder ~/
cd ~/
tar -zcvf data-folder.tar.gz data-folder
rm -rvf data-folder

Agora eu já consumi 2,5 GB na minha cota de disco de usuário, tenho espaço suficiente para copiar arquivos para minha casa, mas não para tar novamente.

Existe alguma maneira de tar e copiar a pasta com um único comando, digamos, usando um pipe.

P.S. Eu não posso tar em /opt porque eu só tenho acesso de leitura para /opt .

    
por Kamath 21.12.2012 / 13:30

2 respostas

5

Você quer criar um arquivo tar longe do local onde os arquivos que você precisa para residir?

Existem muitas maneiras de fazer isso.

Se for criado localmente (= na mesma máquina):

tar czvf /path/to/destination/newfile.tar.gz  ./SOURCEDIR_OR_FILES

Você pode adicionar arquivos ou diretórios adicionais ao tar no final desse comando.

Se for criado remotamente (ou seja, você deseja criar o arquivo tar em um host remoto daquele que contém os dados a serem tarados):

tar czvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cat > newfile.tar.gz'

A versão posterior é muito versátil. Por exemplo, você também pode "duplicar" um diretório + subdiretórios usando a mesma técnica:

Duplique um diretório + subdiretórios para outro diretório local:

tar cf - ./SOURCEDIR_OR_FILES | ( cd LOCAL_DEST_DIR && tar xvf - )

Duplique um diretório + subdiretórios para outro diretório remoto:

tar cvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cd REMOTE_DEST_DIR && tar xf - '

Solte o 'v' se você não precisar dele para mostrar os arquivos enquanto eles estão tar (ou não): ele irá muito mais rápido, mas não vai dizer muito a menos que haja um erro.

Eu uso ". / ..." para a fonte forçar o tar a armazená-lo como um caminho RELATIVO. Em alguns casos, você desejará adicionar informações adicionais do caminho:

Por exemplo, para tar os arquivos crontab, incluindo o em / etc, você poderia fazer:

cd / ; tar czf all_crons.tgz  ./etc/*cron*  ./var/spool/cron

Eu uso propositalmente o caminho relativo: algumas versões antigas do tar podem ser perigosas e extrair arquivos com seu caminho GLOBAL original, o que significa que você poderia fazer: cd /safedir ; tar xvf sometar e ter os arquivos com nomes globais sobrescrevendo arquivos em seu caminho original que é FORA de / safedir e não por baixo! Muito perigoso e ainda possível, pois há servidores de produção antigos por aí. É melhor ser usado para usar caminhos relativos o tempo todo, mesmo se você usar um tar mais recente.

    
por 21.12.2012 / 14:45
0

Use a opção -h tar. Na página do manual:

-h, --dereference
don't archive symlinks; archive the files they point to

para que você possa usar tar -zcvfh data-folder.tar.gz /opt/data-folder , espero que isso ajude:)

    
por 21.12.2012 / 13:35

Tags