Backup automatique lors d'une copie

Vous devez faire une mise à jour de certains fichiers dans une arborescence, mais backuper les fichiers un par un est fastidieux ? Voici une astuce pour aller plus rapidement.

  • Se placer dans le répertoire des fichiers originaux.
  • Créer une archive en utilisant la liste des nouveaux fichiers.

Exemple :

delovan@x-301:$ cd /path/fichiers/originaux
delovan@x-301:$ tar czfv /backup/backup.tar.gz $(find /path/fichiers/maj -type f | cut -d"/" -f 5-)

Notez l'utilisation du cut -f 5 qui permet d'éliminer de la sortie de find le chemin absolu. Notez également le -type f qui permet de ne pas sauvegarder les répertoires en plus des fichiers qu'ils contiennent Attention, il y a deux faiblesses pour ce script :

  1. Si la liste des fichiers est trop longue, l'archive ne pourra pas être créé et le système vous jettera avec un too many arguments
  2. Si un répertoire est vide, il ne sera pas backupé (mais est-ce réellement important ?)

Dernière chose, lors du remplacement des fichiers, il y a une option peu connue de la commande cp permettant de backuper les fichiers originaux avant de les remplacer. Il s'agit de l'option --backup (ou -b). Cela créera un fichier backup avec un tilde (~) à la fin. Vous pouvez spécifier le suffixe avec --suffixe (ou -S). Exemple :

delovan@x-301:$ ls -al
total 0
delovan@x-301:$ touch original
delovan@x-301:$ mkdir copie
delovan@x-301:$ ls
copie original
delovan@x-301:$ cp original copie/
delovan@x-301:$ ls copie/
original
delovan@x-301:$ cp --backup original copie/
delovan@x-301:$ ls copie/
original original~
delovan@x-301:$ cp --backup --suffix=".$(date +%Y%m%d%H%M)" original copie/
delovan@x-301:$ ls copie/
original original~ original.201107261128

Comme d'habitude, je vous laisse le man pour plus d'informations. Ah, et tant qu'a faire, utilisez donc des alias :

alias cpb="cp --backup --suffix=".$(date +%Y%m%d%H%M)""

Damien Gustave

Read more posts by this author.