【发布时间】:2021-12-04 13:54:20
【问题描述】:
如您所知,Linux 和 Apple 系统之间存在一定的熟悉度。 我创建了一些 bash 脚本来从 Linux 备份到可移动设备,经过一些调整,这些脚本也可以在 Mac 上运行。 但是,一个在 Mac 上给我带来了两个问题;相反,在 Linux 上使用相同的语法可以正常工作。它的任务是将文件从 U 盘传输到 MacBookPro(2020,带有 BigSur)的硬盘驱动器。 脚本如下:
#!/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
但是当我从控制台启动它时,我得到:
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)
我想知道:
- 为什么 -A 选项在 Mac 上会出现问题(而它在 Linux 中运行良好)?
- 为什么 TARGET 不起作用?
POSTSCRIPTUM
现在代码如下:
#!/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
但是,我仍然收到:
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
【问题讨论】:
-
嗯。为什么不从单独的文本文件中读取路径?
-
更新你的 bash 或在本地编译它,然后把它放在你的
PATH中,然后开心!