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