Como eu crio backups numerados?

0

Alguns utilitários GNU (por exemplo, mv e cp ) podem criar backups numerados ( foo.~1~ ). Outros (por exemplo, wget ) não podem. Eu gostaria de criar backups numerados antes de executar ferramentas que sobrescrevem arquivos por padrão. Aqui está uma função bash que parece fazer o que eu preciso:

backup(){                       # back up the file, emacs style
  file=$1
  if test -f "${file}"; then
    /bin/mv --backup=numbered "$(mktemp ${file}XXX)" "${file}"
    /bin/rm "${file}"
  fi
}

a ser usado, por exemplo, assim:

backup foo
curl http://.... > foo

Gostaria de saber se existe uma maneira melhor.

    
por sds 20.08.2013 / 22:18

1 resposta

0

Ainda não é exatamente um forro, mas você se aproxima com uma única chamada para perl juntamente com sua poderosa opção e (ou seja, executar a parte de substituição):

backup(){
    mv "$1" "$(echo $1 |perl -pe '~s|(.*?)(~([0-9]*)~)?$|print "$1~".(${3}+1)."~"|e and exit')"
}

Observe o and exit que impede que o perl imprima a contagem correspondente que, de outra forma, polui o nome.

Você também pode adicionar 2>/dev/null ao final da linha para mantê-lo quieto quando o arquivo não existir.

    
por 21.08.2013 / 14:06

Tags