Bash
無法使用變數來指定腳本中 rsync 的“–exclude={..}”選項的目標
我的目標是讓我的 bash 腳本執行這個命令:
rsync -azhi --dry-run --exclude={'file1.txt','file2.txt','*.sql'} /from-directory/ /to-directory/
…當如此抽象時:
srcdir='/from-directory/' dstdir='/to-directory/' excludes="{'file1.txt','file2.txt','*.sql'}" rsync -azhi --dry-run --exclude="$excludes" "$srcdir" "$dstdir"
$srcdir
並$dstdir
正確評估,但$excludes
沒有像我希望的那樣被解釋。從命令行, –exclude={‘file1.txt’,‘file2.txt’,’*.sql’} 效果很好。但是,一旦我嘗試將該 {…} 字元串填充到變數中,它就會停止工作。
嘗試使用數組。例如:
excludes=(file1.txt file2.txt '*.sql') rsync -azhi --dry-run $(printf -- "--exclude=%s " "${excludes[@]}") /from-directory/ /to-directory/
順便說一句,如果您希望它擴展到目前目錄中的所有 .sql 文件,請不要
*.sql
用單引號括起來。我猜這不是你想要的,所以我引用了它。這將擴展為:
rsync -azhi --dry-run --exclude=file1.txt --exclude=file2.txt --exclude=*.sql /from-directory/ /to-directory/
或者:
rsync -azhi --dry-run --exclude="$(printf -- "%s," "${excludes[@]}" | sed -e s/,$//)" /from-directory/ /to-directory/
將擴展為:
rsync -azhi --dry-run --exclude=file1.txt,file2.txt,*.sql /from-directory/ /to-directory/