qual é a maneira fácil de excluir pastas em / home durante o backup

1

Estou fazendo backup usando

for a in /home/*
do
//do backup
done

Eu quero excluir algumas pastas em / home. mas para loop pega todas as pastas que eu tenho.

existe alguma maneira para que eu possa especificar a lista de exclusão no topo que pode ser usada em loop

    
por Mirage 04.05.2011 / 07:26

2 respostas

2

Você precisa de algum tipo de avaliação para verificar o que excluir da lista de pastas que você recebe no "para"; apenas usando bash isso pode ser (você pode usar qualquer coisa que você se sinta confortável para avaliar o que excluir (por exemplo, sed, grep, awk, ...)):

exclusiondirs="/home/foo /home/bar" # list of folders to exclude from backup

for a in /home/*; do
if ! [[ "$exclusiondirs" =~ $a ]]; then
    ...do backup...
fi
done

No entanto, eu teria usado algumas outras ferramentas para backup, como o rsync, que pode excluir por si só, por exemplo:

rsync -av /home/* --exclude /home/foo --exclude /home/var destination

Editado :

Como o basex regex é um pouco complicado e difícil de implementar em algumas circunstâncias, eu o substitui por uma declaração grep mais robusta:

if ! echo "$exclusiondirs" | grep -q "\b$a\b" ; then

Esta declaração do grep funcionará em um diretório inicial com nomes como (onde alguns dirs compartilham nomes de partes comuns e incluem espaços):

mkdir -p home/{foo,bar,foobar,a,b,c,a\ b
tree
'-- home
    |-- a
    |-- a b
    |-- b
    |-- bar
    |-- c
    |-- foo
    '-- foobar

~$ echo $exclusiondirs 
/home/foo /home/bar /home/a
~$ for a in /home/*; do if ! echo "$exclusiondirs" | grep -q "\b$a\b" ; then echo $a; fi; done
/home/a b
/home/b
/home/c
/home/foobar
    
por 04.05.2011 / 08:57
1

Vá para a seção Ignorando vários arquivos e pastas nesta página.

    
por 04.05.2011 / 09:22