Il s'agit du même script que celui cité dans mon fil de discussion sur les mhddfs, j'aimerais définir les args en fonction de certaines entrées, et appeler rasync par la suite. Je suis actuellement arrivé à ceci mais seul l'appel à rsync ne fonctionne pas :
#!/bin/bash
INCLUDE=""
EXCLUDE=""
USER=""
HOST=""
KEY=""
FORCE=false
SHUTDOWN=false
DESTINATION=""
LASTFULL=""
while getopts u:h:k:s:o:f:e:i: option
do
case "${option}" in
u) USER=${OPTARG};;
i) INCLUDE=${OPTARG};;
e) EXCLUDE=${OPTARG};;
h) HOST=${OPTARG};;
k) KEY=${OPTARG};;
s) SHUTDOWN=true;;
o) DESTINATION=${OPTARG};;
f) FORCE=true;
esac
done
if [ -z $USER ] || [ -z $HOST ] || [ -z $DESTINATION ]
then
echo "Usage : $0 <-u : user> <-h : host> <-t : type> <-o : output directory> [-k : key] [-s : shutdown]"
exit 1
fi
if [ ! -d "$DESTINATION/../Backup" ]
then
if [ ! -d "$DESTINATION/Backup" ]
then
echo "Creating backup directory on target..."
if ! mkdir "$DESTINATION/Backup"
then
echo "Could not create the backup directory. Exiting."
exit 2
fi
fi
DESTINATION="$DESTINATION/Backup"
fi
RSYNC_ARGS="-ravh -H --rsync-path=\"sudo rsync\" --append --progress --delete --safe-links"
if [ -f "$KEY" ]
then
RSYNC_ARGS="$RSYNC_ARGS -e \"ssh -i $KEY\""
fi
if [ -f "$INCLUDE" ]
then
echo "Including only files from $INCLUDE"
RSYNC_ARGS="$RSYNC_ARGS --files-from=$INCLUDE"
fi
if [ -f "$EXCLUDE" ]
then
echo "Excluding files from $EXCLUDE"
RSYNC_ARGS="$RSYNC_ARGS --exclude-from=$EXCLUDE"
fi
if ! $FORCE
then
LASTBACKUP=$(basename $(ls -td $DESTINATION/*/ | sed "y/\t/\n/" | head -n 1 ) 2>/dev/null)
echo "Processing backup based on --> $LASTBACKUP"
RSYNC_ARGS="$RSYNC_ARGS --link-dest=../$LASTBACKUP"
else
echo "Processing full backup"
fi
DESTINATION=$(echo "$DESTINATION/$(date '+%Y_%m_%d')" | sed "s#//#/#g")
rsync $RSYNC_ARGS $USER@$HOST:/ $DESTINATION 2> error.log
CODE=$?
if [ $CODE -eq 0 ]
then
echo "Backup done : $DESTINATION"
exit 0
else
echo "Rsync stopped with code $CODE"
exit $CODE
fi
J'obtiens
Rsync stopped with code 1
Le fichier error.log contient
Unexpected remote arg : <correct username>@<correct host>:/
Lorsque je fais un écho de l'appel rsync, que je le copie et le colle, cela fonctionne.
Je sais que $RSYNC_ARGS est à l'origine du problème, mais je ne sais pas comment l'appeler correctement. Une idée ?