Vous avez divers problèmes là-bas.
Tout d'abord, vous voulez affecter le résultat de la commande date +%b-%d-%y
à la TESTDATE
variable. Pour ce faire, vous devez utiliser la substitution de commande :
TESTDATE=$(date +%b-%d-%y)
Ce que votre script est en train de faire, c'est d'affecter la chaîne date +%b-%d-%y
à TESTDATE
, pas le résultat de la commande. Vous pouvez tester en exécutant ceci:
TESTDATE="date +%b-%d-%y"
echo $TESTDATE
qui va imprimer date +%b-%d-%y
.
Deuxièmement, vous utilisez la substitution de commande là où vous ne devriez pas, ce que vous voulez, c'est:
zipfile="${DEST}/${TESTDATE} ${d} ${BASENAME}.zip"
Donc, vous ne voulez pas les parenthèses. Je n'ai également aucune idée de ce que vous essayez de faire avec basename
. basename
est un programme par défaut et vous n'avez pas besoin de le placer dans une variable pour l'utiliser. La commande ci-dessus définit /volume1/NetBackup/Backup/${TESTDATE} ${d} /usr/bin/basename
un fichier zip dont le nom de fichier n'est pas valide. Si vous expliquez ce que vous essayez de faire avec nom de base, je pourrais peut-être vous aider, mais cela n'a aucun sens.
Vous semblez penser que DIRS
c'est une liste, ce n'est pas un répertoire unique /volume1/NetBackup
.
Un autre point est une question de style. Vous devez toujours éviter d'utiliser des noms de variables CAPITAL, car les variables d'environnement sont en majuscules, ce qui peut poser problème si vous utilisez le même nom.
Quoi qu'il en soit, si je comprends ce que vous essayez de faire ici, vous pouvez écrire le script de la manière suivante (j'ai créé dirs
un tableau puisque je pense que c'est ce que vous vouliez):
#!/usr/bin/env bash
# date
testdate=$(date +%b-%d-%y)
# dirs to backup
dirs=("/volume1/NetBackup" "/volume1/foobar")
# Save zip file elsewhere on the server
dest="/volume1/NetBackup/Backup"
# set to "no" keep old zip file and add new file
delete_old_zip_files="no"
#Path to binary files
zip=/usr/syno/bin/zip
base=$(/usr/bin/basename ${dest})
echo "bb $base";
for d in ${dirs[@]}
do
## I assume this is what you wanted to do, it will just
## return the name of the current $d directory
base=$(/usr/bin/basename ${d})
zipfile="${dest}/${testdate} ${base}.zip"
echo -n "Creating $d $zipfile..."
# create zip file
${zip} -r $zipfile $d && echo "Done!" || echo ""
done
L'exemple de script ci-dessus créerait /volume1/NetBackup/Backup/Mar-05-14 NetBackup.zip
et /volume1/NetBackup/Backup/Mar-05-14 foobar.zip
. En passant, je vous suggère également fortement d'éviter de créer des noms de fichiers avec des espaces, vous me remercierez plus tard.