source: publico/utilidades/AdministracaoServidores/transfere @ 2756

Última Alteração nesse arquivo desde 2756 foi 2756, incluída por cristianocampos, 14 anos atrás

Rotina para mover/copiar arquivos de uma pasta para outra, mudando dono/grupo e permissão. Todas as consistências para evitar perda de arquivo são executadas.

  • Propriedade svn:executable mudada para *
File size: 10.2 KB
Linha 
1#!/bin/bash
2#
3# Rotina de Transferência de arquivos de uma pasta para outra já mudando as permissões do arquivo, conforme descrito pelo usuário da Rotina.
4#
5# Autor: Cristiano
6#
7# Ter 01 Ago 2006
8#
9
10
11#
12# Aqui confere os parametros passados para evitar problemas e tentar achar erros
13#
14TEM_PARAMETROS="n"
15CONTADOR=0
16PARAMETRO_ENCONTRADO=""
17
18for CONFERE_PARAMETROS in  $*; do
19    TEM_PARAMETROS="s"
20    CONTADOR=`expr $CONTADOR + 1`
21
22
23    # Verificação se o usuário colocou algum parametro duas vezes ou se colocou algum os dois parametros no mesmo comando
24    #
25    if test "$CONFERE_PARAMETROS" = "-m" -o "$CONFERE_PARAMETROS" = "-c"; then
26       if test "$PARAMETRO_ENCONTRADO" = "c" -o "$PARAMETRO_ENCONTRADO" = "m"; then
27          echo -e "\n\033[1mJá foi encontrado um parametro. Favor corrigir.\033[0m"
28          CONFERE_PARAMETROS="-h"
29       else
30          PARAMETRO_ENCONTRADO=`echo $CONFERE_PARAMETROS | cut -c2-`
31       fi
32    fi
33
34    # Verifica se foi colocado algum parametro não permitido
35    #
36    if test `echo $CONFERE_PARAMETROS | cut -c1-1` = "-"; then
37       PAR=`echo $CONFERE_PARAMETROS | cut -c2-`
38       if test "$PAR" != "c" -a "$PAR" != "m" -a "$PAR" != "h" -a "$PAR" != "-help"; then
39          echo -e "\n\033[1mParametro $CONFERE_PARAMETROS não é aceitável.\n\033[0m"
40          CONFERE_PARAMETROS="-h"
41       fi
42    fi
43
44    # Aqui verifica se os parametros foram colocados no início da linha de comando
45    #
46    if test "$CONFERE_PARAMETROS" = "-m" -o "$CONFERE_PARAMETROS" = "-c"; then
47       if test $CONTADOR -gt 1; then
48          echo -e "\n \033[1mOs parametros -m, ou -c devem ser colocados em primeiro lugar.\033[0m\n"
49          CONFERE_PARAMETROS="-h"
50       fi
51    fi
52
53    # Aqui apresenta o HELP
54    #
55    if test "$CONFERE_PARAMETROS" = "--help" -o "$CONFERE_PARAMETROS" = "-h"; then
56       echo -e "\n\n\033[1mSintaxe de `basename $0`:
57
58                `basename $0` [-hmc] [--help] Arq_Origem Dir_Destino Dono_Arq Grupo_Arq Permissao_Acesso\033[0m\n\n
59
60                \033[1m--help:\033[0m para exibição do help
61
62                \033[1m-h:\033[0m para exibição do help
63                \033[1m-c:\033[0m para cópia do arquivo <default>
64                \033[1m-m:\033[0m para mover o arquivo"
65
66
67       exit
68    fi
69done
70
71
72# Caso tenha encontrado algum parametro salta ele, para fazer a captura de parametros sem problema
73#
74if test "$PARAMETRO_ENCONTRADO" = "m" -o "$PARAMETRO_ENCONTRADO" = "c"; then
75   shift
76fi
77
78
79ORIG=$1  # Arquivo de origem (com todos os diretórios
80DEST=$2  # Diretório de Destino
81DONO=$3  # Usuário que será o dono do arquivo
82GRUP=$4  # Grupo que será do arquivo
83PERM=$5  # Permissão do arquivo
84
85
86if test "$ORIG" -a "$DEST"; then
87   test `dirname $ORIG` = "$DEST" && echo -e "\n\n\033[1mDiretório de ORIGEM = Diretório de DESTINO.\033[0m\n\n" && exit
88
89fi
90
91#
92# While responsável por pegar o nome do arquivo de origem (com o devido percurso)
93#
94while test ! -f "$ORIG"; do
95      echo -e "\nInforme o nome (com percurso) do arquivo de origem: \c"
96      read ORIG
97
98      test "$ORIG" = "fim" -o "$ORIG" = "Fim" -o "$ORIG" = "FIM" && exit
99
100      if test ! -f "$ORIG"; then
101         echo -e "\n\033[1mArquivo informado não existe.\n\033[0m"
102         ORIG=""
103      fi
104done
105
106#
107# While responsável por pegar o nome do diretório de destino
108#
109while test ! -d "$DEST"; do
110      echo -e "\nInforme o diretório de destino do arquivo: \c"
111      read DEST
112
113      test "$DEST" = "fim" -o "$DEST" = "Fim" -o "$DEST" = "FIM" && exit
114
115      # Verifica se destino exite
116      #
117      if test ! -d "$DEST"; then
118         echo -e "\n\033[1mDiretório de Destino não existe.\n\033[0m"
119         DEST=""
120         continue
121      fi
122
123      # Verifica se origem e destino são iguais
124      #
125      if test `dirname $ORIG` = "$DEST"; then
126         echo -e "\n\033[1mDiretório de Destino = Diretório de Origem.\033[0m\n\n"
127         DEST=""
128         continue
129      fi
130
131      # Verifica se o arquivo já existe em DESTINO
132      #
133      if test -f $DEST/`basename $ORIG`; then
134         echo -e "\nArquivo `basename $ORIG` existe no diretório $DEST. Deseja sobrescrever (s/\033[1mN\033[0m)? \c"
135         read OPSN
136
137         test "$OPSN" = "fim" -o "$OPSN" = "Fim" -o "$OPSN" = "FIM" && exit
138
139         if test "$OPSN" = "s" -o "$OPSN" = "N"; then
140            break
141         else
142            DEST=""
143         fi
144      fi
145done
146
147#
148# Vamos Mudar o done/grupo do arquivo?
149#
150if test "$DONO" = ""; then
151   echo -e "\nDeseja mudar DONO e GRUPO do arquivo (\033[1mS\033[0m/n)? \c"
152   read OPSN
153else
154   OPSN="s"
155fi
156
157#
158# Se sim entramos aqui
159#
160if test "$OPSN" != "n" -a "$OPSN" != "N"; then
161   #
162   # Aqui definimos o novo DONO do arquivo
163   #
164   while true; do
165         if test "$DONO"; then
166            EXISTE_LINHA=`cat /etc/passwd | grep $DONO`
167            test "$EXISTE_LINHA" && break || echo -e "\n\033[1m$DONO não cadastrado.\033[0m\n"
168         fi
169
170         echo -e "\n Informe o novo DONO do arquivo: \c"
171         read DONO
172
173         test "$DONO" = "Fim" -o "$DONO" = "fim" -o "$DONO" = "FIM" && exit
174   done
175
176   #
177   # Aqui definimos o novo GRUPO do arquivo
178   #
179   while true; do
180         if test "$GRUP"; then
181            EXISTE_LINHA=`cat /etc/passwd | grep $GRUP`
182            test "$EXISTE_LINHA" && break || echo -e "\n\033[1m$GRUP não cadastrado.\033[0m\n"
183         fi
184
185         echo -e "\n Informe o novo GRUPO do arquivo: \c"
186         read GRUP
187
188         test "$GRUP" = "Fim" -o "$GRUP" = "fim" -o "$GRUP" = "FIM" && exit
189   done
190
191   #
192   # Aqui defini-se as novas permissões
193   #
194
195   # Primeiro vamos ver se a nova permissão foi passada por linha de comando
196   # Se sim vamos consistir, se estiver incorreta vamos entrar no loop para montar a nova permissão
197   #
198   if test "$PERM"; then
199      PD=`echo $PERM | cut -c1-1` # Permissão do dono
200      PG=`echo $PERM | cut -c2-2` # Permissão do grupo
201      PU=`echo $PERM | cut -c3-3` # Permissão para os demais usuários
202
203      if test "$PD" -gt 7 -o "$PD" -lt 0; then
204         echo -e "\n\033[1mPermissão para o dono esta incorreta.\033[0m"
205         OPSN="s"
206      elif test "$PG" -gt 7 -o "$PG" -lt 0; then
207           echo -e "\n\033[1mPermissão para o grupo esta incorreta.\033[0m"
208           OPSN="s"
209      elif test "$PU" -gt 7 -o "$PU" -lt 0; then
210           echo -e "\n\033[1mPermissão para demais usuários esta incorreta.\033[0m"
211           OPSN="s"
212      fi
213   else
214      # Caso a nova permissão não tenha sido passada por linha de comando vamos perguntar se desejamos mudar a existente
215      #
216      echo -e "Deseja alterar as permissões do arquivo (s/\033[1mN\033[0m)? \c"
217      read OPSN
218
219      test "$OPSN" = "fim" -o "$OPSN" = "FIM" -o "$OPSN" = "Fim" && exit
220
221      NEW_PERM=""
222   fi
223
224   # Caso desejamos mudar a permissão, ou ela tenha sido passada (de forma incorreta) pela linha de comando entramos no loop
225   # para gerar nova permissão
226   #
227   if test "$OPSN" = "S" -o "$OPSN" = "s"; then
228      PERM_PARA="Dono"
229      NOME_PERM="$DONO"
230
231      while true; do
232            echo -e "\n\nPara definir as permissões de acesso ao arquivo para \033[1m$PERM_PARA\033[0m some os valores e informe o resultado:\n\n"
233            echo -e "\033[1m4\033[0m para permitir leitura  do arquivo pelo $PERM_PARA $NOME_PERM"
234            echo -e "\033[1m2\033[0m para permitir gravação no arquivo pelo $PERM_PARA $NOME_PERM"
235            echo -e "\033[1m1\033[0m para permitir execução do arquivo pelo $PERM_PARA $NOME_PERM"
236            echo -e "\033[1m0\033[0m para retirar todas as permissões do arquivo para $PERM_PARA"
237            echo -e "\n\nInforme a soma baseada nos valores acima: \c"
238            read SOMA_PERM
239
240            test "$SOMA_PERM" = "fim" -o "$SOMA_PERM" = "Fim" -o "$SOMA_PERM" = "FIM" && exit
241
242            if test ! "$SOMA_PERM"; then
243               echo -e "\n\033[1mFavor informar algum valor ou \033[0mfim\033[1m para encerrar.\033[0m"
244               continue
245            elif test "$SOMA_PERM" = "FIM" -o "$SOMA_PERM" = "fim" -o "$SOMA_PERM" = "Fim"; then
246                 echo -e "\n\033[1mRotina finalizada a pedido do usuário.\n\033[0m"
247                 exit
248            elif test "$SOMA_PERM" -gt 7 -o "$SOMA_PERM" -lt "0"; then
249                 echo -e "\n\033[1mA soma das permissões nunca será maior que \033[0m7\033[1m ou menor que \033[0m0\033[1m.\033[0m."
250                 continue
251            fi
252
253            case $PERM_PARA in
254                 "Dono")
255                        PERM_PARA="Grupo"
256                        PERM_DONO=$SOMA_PERM
257                        NOME_PERM="$GRUP"
258                        ;;
259                 "Grupo")
260                        PERM_PARA="Demais Usuários"
261                        PERM_GRUP=$SOMA_PERM
262                        NOME_PERM=""
263                        ;;
264                 *)
265                        PERM_OUT=$SOMA_PERM
266                        break
267                        ;;
268            esac
269
270      done
271      PERM="$PERM_DONO$PERM_GRUP$PERM_OUT"
272   fi
273fi
274
275# Verifica-se se desejamos copiar ou mover o arquivo
276#
277if test ! "$PARAMETRO_ENCONTRADO"; then
278   while true; do
279         echo -e "\nFavor informar:\n\n"
280         echo -e "\033[1m1\033[0m - Para copiar o arquivo"
281         echo -e "\033[1m2\033[0m - Para mover o arquivo"
282         echo -e "\nInforme sua opção - \c"
283         read OP
284
285         case $OP in
286              1)
287                COMANDO="cp"
288                break
289                ;;
290              2)
291                COMANDO="mv"
292                break
293                ;;
294          "Fim")
295                exit
296                ;;
297          "FIM")
298                exit
299                ;;
300          "fim")
301                exit
302                ;;
303              *)
304                echo -e "\n\033[1mOpção inválida.\033[0m\n"
305                ;;
306         esac
307   done
308else
309   if test "$PARAMETRO_ENCONTRADO" = "c"; then
310      COMANDO="cp"
311   elif test "$PARAMETRO_ENCONTRADO" = "m"; then
312        COMANDO="mv"
313   else
314        echo -e "\n\n\033[1mParametro (m ou c) incorreto neste ponto. Shell Script abortado!!!!!\033[0m\n\n"
315        exit
316   fi
317fi
318
319# Aqui copia-se/move-se o arquivo
320#
321$COMANDO $ORIG $DEST
322
323NM_ARQ=`basename $ORIG`
324
325# Aqui muda-se o DONO do arquivo, caso seja este o desejo
326#
327if test "$DONO"; then
328   chown $DONO $DEST/$NM_ARQ
329fi
330
331# Aqui muda-se o GRUPO do arquivo, caso seja este o desejo
332#
333if test "$GRUP"; then
334   chgrp $GRUP $DEST/$NM_ARQ
335fi
336
337# Aqui muda-se a permissão para os DEMAIS USUÁRIOS, caso seja este o desejo
338#
339if test "$PERM"; then
340   chmod $NEW_PERM $DEST/$NM_ARQ
341fi
342
343
Note: Veja TracBrowser para ajuda no uso do navegador do trac.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.