我有以下bash数组:
IGNORED_DIRS=(
"vendor"
"node_modules"
"bower_components"
"tmp"
"backup"
)
我需要以这样的方式输出:
tar -cpzf /var/backups/ --exclude="vendor" --exclude="node_modules" --exclude="bower_components" --exclude="tmp" --exclude="backup"
到目前为止,我尝试了以下内容:
for dir in ${IGNORED_DIRS[@]}
do
EXCLUDES=$EXCLUDES" --exclude=\""$dir"\""
done
这样我最终会得到一个包含确切排除字符串的变量。我以为我可以干脆做到
tar -cpzf /var/backups/ $EXCLUDES
但是这只是忽略了所有的排除标志。有没有人为我找到解决方案?
答案 0 :(得分:4)
BashFAQ #50详细介绍了这一点。总结一个解决方案:
extra_args=( )
for dir in "${IGNORED_DIRS[@]}"; do
extra_args+=( --exclude="$dir" )
done
tar -cpz "${extra_args[@]}" -f /var/backups/
答案 1 :(得分:1)
修改@ favoretti的响应,使用(..)
收集数组,使用${array[@]}
将数组扩展为项目,而不是加入一个字符串。
IGNORED_DIRS=(
"vendor"
"node_modules"
"bower_components"
"tmp"
"backup"
)
for dir in "${IGNORED_DIRS[@]}"
do
EXCLUDES=("${EXCLUDES[@]}" --exclude="$dir")
done
tar -cf /var/backup "${EXCLUDES[@]}"