como criar um script para compactar arquivos recursivamente?

Iniciado por sboorbou, 08 de Janeiro de 2010, 15:23

tópico anterior - próximo tópico

sboorbou

boas, veja se conseguem me ajudar.........

quero criar um script que compacte todo o arquivo que tenha o nome *.2009.zip em cada sub-pasta de um diretorio, mas o "aglutinado" de arquivos deve ficar dentro do mesmo subdiretorio de onde os *.2009.zip e depois os arquivos que foram aglutinados deveriam ser deletados ficando somente o "zipzão" que acabei de criar.
Mais abaixo dou um exemplo da arvore de diretórios que tenho, e como o 1º diretorio deveria ficar...

./00478844
drwxr-xr-x  2 san san 4,0K 2009-06-22 11:37 .
drwxr-xr-x 37 san san 4,0K 2010-01-08 15:07 ..
-rw-r--r--  1 san san  120K 2008-12-26 10:48 2009.zip < zipzão criado, se comparar com as pastas mais abaixo, existiam váriass *.2009.zip
-rw-r--r--  1 san san 3,7K 2009-05-26 15:56 06.2009.LST
-rw-r--r--  1 san san 200K 2009-03-30 15:54 2008.zip
-rw-r--r--  1 san san    0 2009-06-22 11:37 PART 06.2009.LST





exemplo dos diretorios;

san@sboorbou:~/Desktop/teste$ ls -R -lha
.:
total 148K
drwxr-xr-x 37 san san 4,0K 2010-01-08 15:07 .
drwxr-xr-x  5 san san 4,0K 2010-01-08 12:12 ..
drwxr-xr-x  2 san san 4,0K 2009-06-22 11:37 00478844
drwxr-xr-x  2 san san 4,0K 2009-10-29 08:36 00478859
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:51 00478897
drwxr-xr-x  2 san san 4,0K 2009-12-22 09:07 00478960
drwxr-xr-x  2 san san 4,0K 2009-06-22 11:37 00487802
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:51 00487825
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:52 00487857
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:53 00487862
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:53 00487870
drwxr-xr-x  2 san san 4,0K 2009-03-30 16:06 00487896
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:54 00487925
drwxr-xr-x  2 san san 4,0K 2009-12-23 09:00 00488036
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:54 00488105
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:55 00488119
drwxr-xr-x  4 san san 4,0K 2010-01-04 17:55 00488150
drwxr-xr-x  2 san san 4,0K 2009-03-30 16:11 00488179
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:55 00488196
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:56 00488211
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:57 00488254
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:57 00488297
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:58 00488313
drwxr-xr-x  2 san san 4,0K 2009-12-23 09:00 00488365
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:58 00488370
drwxr-xr-x  3 san san 4,0K 2010-01-04 17:57 00488390
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:59 00488397
drwxr-xr-x  2 san san 4,0K 2009-12-22 09:07 00488405
drwxr-xr-x  2 san san 4,0K 2009-12-24 10:00 00488458
drwxr-xr-x  3 san san 4,0K 2009-08-27 15:22 00488489
drwxr-xr-x  2 san san 4,0K 2009-12-24 10:01 00488521
drwxr-xr-x  2 san san 4,0K 2009-12-01 15:55 00488677
drwxr-xr-x  2 san san 4,0K 2009-12-24 10:02 00488700
drwxr-xr-x  3 san san 4,0K 2010-01-04 17:59 00488732
drwxr-xr-x  2 san san 4,0K 2009-12-24 10:02 00488803
drwxr-xr-x  2 san san 4,0K 2009-12-24 10:03 00488858
drwxr-xr-x  2 san san 4,0K 2009-12-24 10:04 00488970

./00478844:
total 384K
drwxr-xr-x  2 san san 4,0K 2009-06-22 11:37 .
drwxr-xr-x 37 san san 4,0K 2010-01-08 15:07 ..
-rw-r--r--  1 san san  40K 2008-12-26 10:48 01.2009.zip
-rw-r--r--  1 san san  41K 2009-01-29 18:31 02.2009.zip
-rw-r--r--  1 san san  40K 2009-02-27 17:42 03.2009.zip
-rw-r--r--  1 san san  40K 2009-03-30 15:54 04.2009.zip
-rw-r--r--  1 san san 1,3K 2009-04-29 17:11 05.2009.zip
-rw-r--r--  1 san san 3,7K 2009-05-26 15:56 06.2009.LST
-rw-r--r--  1 san san 200K 2009-03-30 15:54 2008.zip
-rw-r--r--  1 san san    0 2009-06-22 11:37 PART 06.2009.LST

./00478859:
total 776K
drwxr-xr-x  2 san san 4,0K 2009-10-29 08:36 .
drwxr-xr-x 37 san san 4,0K 2010-01-08 15:07 ..
-rw-r--r--  1 san san  44K 2008-12-26 10:49 01.2009.zip
-rw-r--r--  1 san san  45K 2009-01-29 18:31 02.2009.zip
-rw-r--r--  1 san san  44K 2009-02-27 17:49 03.2009.zip
-rw-r--r--  1 san san  44K 2009-03-30 15:54 04.2009.zip
-rw-r--r--  1 san san  45K 2009-04-29 17:12 05.2009.zip
-rw-r--r--  1 san san  44K 2009-05-28 11:55 06.2009.zip
-rw-r--r--  1 san san  44K 2009-06-29 15:33 07.2009.zip
-rw-r--r--  1 san san  44K 2009-07-29 13:54 08.2009.zip
-rw-r--r--  1 san san  44K 2009-08-27 17:11 09.2009.zip
-rw-r--r--  1 san san  44K 2009-09-29 15:49 10.2009.zip
-rw-r--r--  1 san san  91K 2009-10-29 08:35 11.2009.zip
-rw-r--r--  1 san san 220K 2009-03-30 15:55 2008.zip

./00478897:
total 1,8M
drwxr-xr-x  2 san san 4,0K 2009-12-24 09:51 .
drwxr-xr-x 37 san san 4,0K 2010-01-08 15:07 ..
-rw-r--r--  1 san san  82K 2008-12-26 10:49 01.2009.zip
-rw-r--r--  1 san san 195K 2009-12-24 09:51 01.2010.zip
-rw-r--r--  1 san san  82K 2009-01-29 18:32 02.2009.zip
-rw-r--r--  1 san san  82K 2009-02-27 17:49 03.2009.zip
-rw-r--r--  1 san san  82K 2009-03-30 15:56 04.2009.zip
-rw-r--r--  1 san san  82K 2009-04-29 17:12 05.2009.zip
-rw-r--r--  1 san san  83K 2009-05-28 11:56 06.2009.zip
-rw-r--r--  1 san san  80K 2009-06-29 15:33 07.2009.zip
-rw-r--r--  1 san san  82K 2009-07-29 13:54 08.2009.zip
-rw-r--r--  1 san san  81K 2009-08-27 17:12 09.2009.zip
-rw-r--r--  1 san san  82K 2009-09-29 15:50 10.2009.zip
-rw-r--r--  1 san san 139K 2009-10-29 08:37 11.2009.zip
-rw-r--r--  1 san san 148K 2009-12-01 17:18 12.2009.zip
-rw-r--r--  1 san san 408K 2009-03-30 15:56 2008.zip

./00478960:
total 828K
drwxr-xr-x  2 san san 4,0K 2009-12-22 09:07 .
drwxr-xr-x 37 san san 4,0K 2010-01-08 15:07 ..
-rw-r--r--  1 san san  42K 2008-12-26 08:53 01.2009.zip
-rw-r--r--  1 san san  95K 2009-12-16 14:26 01.2010.zip
-rw-r--r--  1 san san  42K 2009-01-29 18:32 02.2009.zip
-rw-r--r--  1 san san  42K 2009-02-27 17:50 03.2009.zip
-rw-r--r--  1 san san  42K 2009-03-30 15:57 04.2009.zip
-rw-r--r--  1 san san  47K 2009-04-29 17:15 05.2009.zip
-rw-r--r--  1 san san  844 2009-05-28 11:57 06.2009.zip
-rw-r--r--  1 san san 1,6K 2009-06-29 15:34 07.2009.zip
-rw-r--r--  1 san san  42K 2009-09-04 10:41 09.2009.zip
-rw-r--r--  1 san san  41K 2009-09-16 09:02 10.2009.zip
-rw-r--r--  1 san san  88K 2009-10-20 16:48 11.2009.zip
-rw-r--r--  1 san san  92K 2009-11-17 16:30 12.2009.zip
-rw-r--r--  1 san san 205K 2009-03-30 15:57 2008.zip
-rw-r--r--  1 san san    0 2009-12-22 09:07 part 01.2010.LST

./00487802:
total 300K
drwxr-xr-x  2 san san 4,0K 2009-06-22 11:37 .
drwxr-xr-x 37 san san 4,0K 2010-01-08 15:07 ..
-rw-r--r--  1 san san  40K 2008-12-26 08:53 012009.zip
-rw-r--r--  1 san san  40K 2009-01-29 18:32 02.2009.zip
-rw-r--r--  1 san san  890 2009-04-29 17:16 05.2009.zip
-rw-r--r--  1 san san  811 2009-05-28 11:58 06.2009.zip
-rw-r--r--  1 san san 198K 2009-04-29 17:16 2008.zip
-rw-r--r--  1 san san    0 2009-06-22 11:37 PART 06.2009.LST
duvida eu em você sinto... duvida a raiva leva, raiva ao ódio leva, ódio é o lado negro da força - Mestre Yoda

sboorbou

#1
bem... estou indo mais ou menos assim... mas o problema é que no find ele pega várias vezes o mesmo diretorio ( 1 vez para cada arquivo dentro do diretorio)... como eu posso fazer para ele pegar 1 diretorio apenas 1 vez???

segue o exemplo de como esta indo o script

#!/bin/bash

cd /home/EU/Desktop/teste/arquivo_mensais
find . ./ |cut -d / -f 2 >> listas.txt ### aqui esta o problema, ele cria uma linha para cada arquivo dentro do diretorio, criando várias entradas para o mesmo diretório, quando eu queria apenas uma entrada para cada diretorio.

for x in $(cat listas.txt)
do
cd /home/EU/Desktop/teste/arquivo_mensais/x




poderiam ajudar-me? como eu faço para ter apenas 1 entada para cada diretorio no arquivo lista.txt
duvida eu em você sinto... duvida a raiva leva, raiva ao ódio leva, ódio é o lado negro da força - Mestre Yoda

clcampos

#2
sboorbou conforme prometido tá abaixo o que você pediu.

Tá funcionando assim:


  • O script não pede informação, tudo é passado pela linha de comando;
  • Os parametros a passar são:

    • Padrão a fazer backup (ex.: 2009.zip   ou .zip. O default é .zip;
    • Diretório para fazer a pesquisa e backup. O default é diretório atual.
  • É gerado um arquivo Padrao_da_pesquisa.zip, dentro do diretório informado;
  • Se já existir esse arquivo lá o script para;
  • Se não existir o diretório o script para;
  • O comando zip já é recursivo e deleta os arquivos, buscando pelo padrão "*Padrão_informado";
  • Se o padrão de pesquisa informado começar com . (ponto), assim como o default (.zip), o arquivo gerado também vai começar com ponto, ai o arquivo fica oculto.

Espero que seja isso que procura.

Citar#!/bin/bash
#
# Faz o backup de um padrão para um arquivo .zip de forma recursiva e deleta os arquivos "backupeados"
#
# Cristiano
# 18/jan/2009
#

PBc=${1:-".zip"}   # Padrão para fazer backup. Default: *.zip
Dir=${2:-"`pwd`"}  # Diretório para fazer backup. Default: Atual

#
# Verifica se o arquivo "padrao para backup".ZIP existe. Se sim encerra
###########################################################################
if test -e $PBc.zip; then
  echo "Arquivo $PBc.zip já existe."
  exit
fi

#
# Verifica se o diretório para backup existe
################################################
if test ! -d $Dir;then
  echo "Diretório $Dir não existe"
  exit
else
  cd $Dir
fi

#
# Faz o backup deletando os arquivos
##############################################
zip $PBc.zip -rm . -i \*$PBc
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!