1 votes

Linux script , Sauvegarde incrémentale dans le même serveur.

Pourriez-vous s'il vous plaît quelqu'un guide pour la sauvegarde incrémentale ci-dessous script, j'ai déjà écrit le script. Je suis confronté à un problème lors du bouclage du script.

Besoin J'ai besoin de : Considérer un dossier source contient A, B, C quand j'ai exécuté le script A, B, C va se déplacer vers le dossier de destination. De nouveau dans le dossier source de nouveaux fichiers/répertoires ajoutés c'est à dire D,E quand de nouveau si j'ai exécuté le script maintenant il devrait vérifier les fichiers déjà présents. Ici dans notre cas A,B,C est déjà présent dans la destination. Donc seulement D,E doivent être déplacés vers la destination.

A partir du code ci-dessous, je suis capable de sauvegarder, mais comment faire en boucle ?

#!/bin/bash
####################################
#
# Backup IS server script script.
#
####################################

# What to backup. 
Integrationserver="/home/ec2-user/source"

# Where to backup to.
dest="/home/ec2-user/destination"

# Create archive filename.
#date=$(date +%F)
IS=source
hostname=$(hostname -s)
#archive_file="$hostname-$IS-$date.tar.gz"
archive_file="$hostname-$IS.tar.gz"

# Print start status message.
echo "Backing up $Integrationserver to $dest/$archive_file"
date
echo

# Backup the files using tar.
tar --exclude=/home/ec2-user/source/logs* --exclude=/home/ec2-user/source/TC*  -zcf $dest/$archive_file $Integrationserver

# Print end status message.
echo
echo "Backup finished"
date
  1. Le code ci-dessous fonctionne bien avec toutes les conditions et les exigences, mais je ne suis pas sûr de savoir comment exclure les répertoires multiples s'il vous plaît guide
#!/bin/bash
source=/home/ec2-user/source
dest=/home/ec2-user/destination
for file in $(find $source -printf "%P\n") ; do
if [ -a $dest/$file ] ; then
if [ $source/$file -nt $dest/$file ]; then
echo "Newer file detected, copying .."
cp -r $source/$file $dest/$file
else
echo "File $file exists, skipping"
fi 
else
echo "$file is being copied over to $dest"
cp -r $source/$file $dest/$file
fi 
done

1voto

Vinicius Points 151

Vous pouvez réaliser ceci avec un script beaucoup plus simple utilisant rsync :

#!/bin/bash

source=/home/ec2-user/source
dest=/home/ec2-user/destination

while true; do
  rsync -qrt $source/ $dest
  sleep 1
done

J'ai utilisé le sleep 1 pour éviter une boucle gourmande en ressources, mais il existe une meilleure solution en utilisant inotify-tools :

while true; do
  inotifywait -e modify,create -r $source && \
    rsync -qrt $source/ $dest
done

El inotifywait restera bloquée jusqu'à ce qu'un fichier soit modifié ou créé (la commande -e modify,create ) et il est très efficace.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X