Insira uma lista de arquivos e diretórios a serem copiados com idem

2

Eu tenho uma pequena lista de arquivos e diretórios dos quais eu gostaria de fazer uma cópia simples do uso de ditto em um bash shell. Existem aproximadamente 8-10 arquivos e / ou diretórios que precisam ser copiados. Eu sei que posso criar uma série de declarações condicionais como:

if [ -d ~/Documents ];
then
  ditto ~/Documents ~/BACKUP/Documents
  echo "Documents copied successfully."
else
  echo "WARNING: No documents were copied, directory does not exist in expected location."
fi

No entanto, estou curioso para saber se existe uma maneira estilisticamente melhor ou mais eficiente de realizar essa tarefa? Outra abordagem que considerei é criar uma matriz que contenha os arquivos / diretórios e, em seguida, usar um loop para percorrer a matriz e copiar cada arquivo. Pensamentos? Idéias? Intuições? Melhores práticas?

    
por sardean 24.01.2012 / 05:21

1 resposta

1

Você pode fazer um loop pelos diretórios dos quais deseja fazer backup. Observe o uso da variável err para acompanhar qualquer erro.

err=0
for d in ~/Documents ~/Pictures ~/Videos; do
  if [ -d "$d" ]; then
    ditto "$d" ~/BACKUP/"${d##*/}" || err=1
  else
    echo 1>&2 "Missing directory: $d"
    err=1
  fi
done
exit $err

Como alternativa, você pode criar uma função que manipule um diretório e o chame várias vezes. Observe o uso de err novamente.

backup () {
  if [ -d "$1" ]; then
    ditto "$1" "$2" || err=1
  else
    echo 1>&2 "Missing directory: $1"
    err=1
  fi
}
err=0
backup ~/Documents ~/BACKUPS/Documents
backup ~/Pictures ~/BACKUPS/Pictures
backup ~/Videos ~/BACKUPS/Videos
    
por 25.01.2012 / 02:11

Tags