Fórum Ubuntu Linux - PT

Suporte Técnico => Programação e Scripts => Tópico iniciado por: olinto em 29 de Julho de 2019, 19:12

Título: fazer comapctação de sub-diretórios de um diretório separadamente
Enviado por: olinto em 29 de Julho de 2019, 19:12
Prezad@s

Quero fazer um script que gere vários arquivos rar, um para cada sub-diretório de um diretório. Cada arquivo rar gerado deve ter o nome  do sub-diretório contido nele. Os arquivos rar criados devem ficar no diretório principal, não dentro dos sub-diretórios.

Por exemplo dentro do diretório "documentos" tenho sub-diretórios "planilhas projeto 1", "planilhas projeto 2", "textos projeto 3", "fotos". Quero que sejam criados no diretório "documentos" os arquivos "planilhas projeto 1.rar", "planilhas projeto 2.rar", etc. contendo os arquivos dos respectivos diretórios compactados.

Fiz o seguinte:

# faz o rar de cada diretório
for diret in `ls -d */`; do
 echo "compactando diretorio $diret"
 rar a nome_do_rar $diret
done

Não estou conseguindo escrever o script de um jeito que fique explícito que nome_do_rar deva ser o nome do diretório que está sendo compactado. Quando coloco "rar a $diret $diret" é criado um arquivo ".rar" dentro de cada um dos diretórios.

O comando rar é simples: rar "a = adiciona" "arquivo de saída" "diretório a ser compactado".

Agradeço muito qualquer sugestão.

Abraços

Antônio Olinto

Título: Re:fazer comapctação de sub-diretórios de um diretório separadamente
Enviado por: olinto em 30 de Julho de 2019, 22:54
Olá pessoal,

Depois de bater um pouco a cabeça consegui algum avanço.

Eu não sei nada de bash, normalmente escrevo em R ou SQL. Segui a lógica que seguiria nessas linguagens e procurei na internet os comandos.  Estou no seguinte estágio:

#!/bin/bash
# rar para diretórios

for diret in $(ls -d */); do
 filename=${diret/%'/'/}
 echo "compactando diretorio $diret"
 rar a "${filename/%'/'/}" "$diret"
done


O script funciona para sub-diretórios cujo nome não possui espaços. Quando há espaço no nome do sub-diretório o rar não é criado. O problema está no filename=${diret/%'/'/}

Achei um site de checagem de linguagem interessante https://www.shellcheck.net/ (https://www.shellcheck.net/) mas mesmo assim não foi.

Bem, continuo aceitando sugestões.

Sds

Antônio Olinto