Compactação com tar

1. Compactação com tar

Andre Barboza
absilva17

(usa Debian)

Enviado em 10/07/2019 - 18:10h

Tenho 5000 arquivos em uma pasta e preciso compacta-los em diversos arquivos tar, sendo que a quantidade de arquivos varia para cada tar.
Tentei criar uma variável usando usando "seq" mas esse comando não entende variáveis e não gera a lista que eu preciso para usar junto com o comando tar.

Alguém pode me ajudar????


  


2. Re: Compactação com tar

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 10/07/2019 - 21:21h

Explica melhor!
Qual é a lógica do agrupamento? Nome dos arquivos ou tipo, data de criação ou o quê?


3. Re: Compactação com tar

Andre Barboza
absilva17

(usa Debian)

Enviado em 11/07/2019 - 09:51h

Nome dos arquivos.

Os arquivos tem em sua nomenclatura uma numeração que vai de 1 até 5000, e tenho uma lista que diz que 1 ao 256 é uma arquivo, do 257 ao 401 é em outro e assim vai.
Declarei algumas variáveis para delimitar o primeiro e o ultimo arquivo que devem ficar em cada arquivo tar, mas na hora de executar o comando seq o comando não entende cada cada numero isolado e sim como se todos os números da lista.
Ex: Dentro uma variável está o primeiro número de cada arquivo separados por espaço: 1 257 402 e assim vai, separados por espaço, e outra varável estão os últimos números como 256 401 etc

O seq não está entende cada número como único, ele entende a variável toda, com todos os números dentro, como se fosse um número. Ou seja, o seq não espaço como delimitador e não sei como faço para colocar um delimitador que o seq entenda.

Por isso não consigo fazer




4. Re: Compactação com tar

Vinicius Mello
vmmello

(usa Slackware)

Enviado em 15/07/2019 - 23:16h

Eu fiz um script de exemplo pra criar arquivos tar agrupando os arquivos de origem de 256 em 256. No script não uso calculos numericos diretamente, só truques de shell :P

Se você quiser ajuda com o seq, por favor dê exemplos de como você está tentando fazer.


#!/bin/bash
#

limpa_temp() {
[ -n "$temp_dir" -a -d "$temp_dir" ] && rm -rf "$temp_dir"
}

erro() {
local msg="$1"

echo "Erro: $msg" 1>&2
exit 1
}

msg_uso() {
echo "Uso: ${BASH_SOURCE[0]##*/} <dir_origem> <dir_destino>

Ordena numericamente os arquivos em \$dir_origem e cria arquivos tar no
\$dir_destino agrupando os arquivos de 256 em 256.
"
exit 1
}

[ -z "$1" -o -z "$2" ] && msg_uso

trap limpa_temp EXIT

dir_origem=$(readlink -e "$1")
dir_destino=$(readlink -e "$2")

if [ ! -d "$dir_origem" ]; then
erro "Erro: arquivo de origem nao eh um diretorio."
elif [ ! -d "$dir_destino" ]; then
erro "Erro: arquivo de destino nao eh um diretorio."
fi

set -e

temp_dir=$(mktemp -d)

( cd "$temp_dir" && ls "$dir_origem" | sort -n | split -l 256 )

declare -i n=0
for tmp_arq in $temp_dir/*; do
n+=1
echo "Processando arquivos a partir de $tmp_arq (n=$n)..."
dest_tar="$dir_destino/arq-$n.tar.gz"
if [ -f "$dest_tar" ]; then
echo " Arquivo '$dest_tar' ja' existe. Passando adiante..."
else
tar --no-overwrite -zcf "$dest_tar" -C "$dir_origem" --files-from="$tmp_arq"
fi
done








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts