As you know, there is a certain familiarity between Linux and Apple systems. I have created some bash scripts to make backups from Linux to removable devices which, with some adjustments, also work on Mac. However, one gives me two problems on Mac; on the contrary, with the same syntax works fine on Linux. Its task is to transfer files from a USB stick to the hard drive of a MacBookPro (2020, with BigSur). The script is as follows:
#!/bin/bash
USER=`whoami`
declare -A BACKUP_INFOS
BACKUP_INFOS=(
[/Users/myuser]="/Volumes/CORSAIR/articoli /Volumes/CORSAIR/bibliografie"
[/Users/myuser/Documents]="/Volumes/CORSAIR/dialettica /Volumes/CORSAIR/dizionario"
)
for dest_dir in "${!BACKUP_INFOS[@]}"
do
mkdir -p "$dest_dir"
src="${BACKUP_INFOS[$dest_dir]}"
rsync -avuz --delete --delete-after --progress $src "$dest_dir"
done
But when I launch it from the console I get:
myuser@MacBook-Pro-di-Mauro system_files % bash macbook.sh
macbook.sh: line 7: declare: -A: invalid option
declare: usage: declare [-afFirtx] [-p] [name[=value] ...]
macbook.sh: line 37: /Users/myuser: syntax error: operand expected (error token is "/Users/myuser)
I wonder:
- why is the -A option problematic on Mac (while it works fine in Linux)?
- Why doesn't TARGET work?
POSTSCRIPTUM
Now the code appears as follows:
#!/bin/bash
backup() {
local dest_dir="$1"
shift
local srcs=("$@")
mkdir -p "$dest_dir"
rsync -avuz --delete --delete-after --progress "${srcs[@]}" "$dest_dir"
}
backup /Users/myuser /Volumes/CORSAIR/articoli /Volumes/CORSAIR/bibliografie
/Volumes/CORSAIR/cataloghi /Volumes/CORSAIR/cd /Volumes/CORSAIR/condominio
/Volumes/CORSAIR/copertine /Volumes/CORSAIR/cratilo /Volumes/CORSAIR/Documenti
/Volumes/CORSAIR/esperienza /Volumes/CORSAIR/ezine /Volumes/CORSAIR/fichte
/Volumes/CORSAIR/filosofi /Volumes/CORSAIR/fonts /Volumes/CORSAIR/francy
/Volumes/CORSAIR/guide_debian /Volumes/CORSAIR/guide_latex
/Volumes/CORSAIR/guide_linux /Volumes/CORSAIR/guide_php
/Volumes/CORSAIR/guide_slackware /Volumes/CORSAIR/html4dummies
/Volumes/CORSAIR/Immagini /Volumes/CORSAIR/mail /Volumes/CORSAIR/mamma
/Volumes/CORSAIR/manuale /Volumes/CORSAIR/materiali /Volumes/CORSAIR/mutt4dummies
/Volumes/CORSAIR/noneuclidee /Volumes/CORSAIR/pearson /Volumes/CORSAIR/privacy
/Volumes/CORSAIR/protagonisti /Volumes/CORSAIR/protagonisti_nuovo
/Volumes/CORSAIR/public_html /Volumes/CORSAIR/retorica /Volumes/CORSAIR/sabina
/Volumes/CORSAIR/sacchettino /Volumes/CORSAIR/Scaricati /Volumes/CORSAIR/slack4dummies
/Volumes/CORSAIR/slackbook /Volumes/CORSAIR/slackproject /Volumes/CORSAIR/software_linux
/Volumes/CORSAIR/software_mac /Volumes/CORSAIR/storia /Volumes/CORSAIR/system_files
/Volumes/CORSAIR/tesi1 /Volumes/CORSAIR/tesi2 /Volumes/CORSAIR/tesi3
/Volumes/CORSAIR/tin4dummies /Volumes/CORSAIR/tipografia /Volumes/CORSAIR/tractatus
/Volumes/CORSAIR/varia /Volumes/CORSAIR/venetaverifiche /Volumes/CORSAIR/xindy
backup Users/myuser/Documents /Volumes/CORSAIR/argomentare /Volumes/CORSAIR/corriere
/Volumes/CORSAIR/dialettica /Volumes/CORSAIR/dizionario /Volumes/CORSAIR/ermeneutica
/Volumes/CORSAIR/fichte /Volumes/CORSAIR/neopositivisti /Volumes/CORSAIR/novecento
/Volumes/CORSAIR/schelling /Volumes/CORSAIR/scuola
However, I still receive:
myuser@MacBook-Pro-di-Mauro system_files % bash macbook.sh
building file list ...
617 files to consider
sent 11651 bytes received 20 bytes 23342.00 bytes/sec
total size is 22103468 speedup is 1893.88
macbook.sh: riga 12: /Volumes/CORSAIR/cataloghi: Is a directory
macbook.sh: riga 13: /Volumes/CORSAIR/copertine: Is a directory
macbook.sh: riga 14: /Volumes/CORSAIR/esperienza: Is a directory
macbook.sh: riga 15: /Volumes/CORSAIR/filosofi: Is a directory
macbook.sh: riga 16: /Volumes/CORSAIR/guide_debian: Is a directory
macbook.sh: riga 17: /Volumes/CORSAIR/guide_linux: Is a directory
macbook.sh: riga 18: /Volumes/CORSAIR/guide_slackware: Is a directory
macbook.sh: riga 19: /Volumes/CORSAIR/Immagini: Is a directory
macbook.sh: riga 20: /Volumes/CORSAIR/manuale: Is a directory
macbook.sh: riga 21: /Volumes/CORSAIR/noneuclidee: Is a directory
macbook.sh: riga 22: /Volumes/CORSAIR/protagonisti: Is a directory
macbook.sh: riga 23: /Volumes/CORSAIR/public_html: Is a directory
macbook.sh: riga 24: /Volumes/CORSAIR/sacchettino: Is a directory
macbook.sh: riga 25: /Volumes/CORSAIR/slackbook: Is a directory
macbook.sh: riga 26: /Volumes/CORSAIR/software_mac: Is a directory
macbook.sh: riga 27: /Volumes/CORSAIR/tesi1: Is a directory
macbook.sh: riga 28: /Volumes/CORSAIR/tin4dummies: Is a directory
macbook.sh: riga 29: /Volumes/CORSAIR/varia: Is a directory
building file list ...
87 files to consider
sent 1770 bytes received 20 bytes 3580.00 bytes/sec
total size is 7654550 speedup is 4276.28
macbook.sh: riga 32: /Volumes/CORSAIR/dialettica: Is a directory
macbook.sh: riga 33: /Volumes/CORSAIR/fichte: Is a directory
macbook.sh: riga 34: /Volumes/CORSAIR/schelling: Is a directory