我正在尝试使用bash脚本来执行tar命令。我需要tar有一个变量参数,但我不能让它工作......这就是:
i=1
for d in /home/test/*
do
dirs[i++]="${d%/}"
done
echo "There are ${#dirs[@]} dirs in the current path"
for((i=1;i<=${#dirs[@]};i++))
do
siteonly=${dirs[i]/\/home\/test\//}
if [[ $siteonly == "choubijoux" ]]
then
exclude='--exclude "aenlever/*"';
fi
tar -czf /backups/sites/$siteonly.tar.gz ${dirs[i]} --exclude "tmp/*" --exclude "temp/*" --exclude "cache/*" $exclude
done
tar命令执行,但没有参数--exclude "aenlever/*"
所以我认为不考虑变量...有没有办法让它接受变量作为参数?
答案 0 :(得分:2)
更好的解决方案是使用数组:
exclude=(--exclude "aenlever/*")
fi
tar -czf /backups/sites/$siteonly.tar.gz ${dirs[i]} --exclude "tmp/*" --exclude "temp/*" --exclude "cache/*" "${exclude[@]}"
此外,我认为您需要为每个循环重置变量,但这取决于您的意图。
for((i=1;i<=${#dirs[@]};i++))
do
exclude=()
我建议将这种简化格式作为一个整体:
#!/bin/bash
dirs=(/home/test/*)
# Verify that they are directories. Remove those that aren't.
for i in "${!dirs[@]}"; do
[[ ! -d ${dirs[i]} ]] && unset 'dirs[i]'
done
echo "There are ${#dirs[@]} dirs in the current path."
for d in "${dirs[@]}"; do
exclude=()
siteonly=${d##*/}
[[ $siteonly == choubijoux ]] && exclude=(--exclude "aenlever/*")
tar -czf "/backups/sites/$siteonly.tar.gz" "$d" --exclude "tmp/*" --exclude "temp/*" --exclude "cache/*" "${exclude[@]}"
done
答案 1 :(得分:0)
您可能希望在echo _${exclude}_
之前tar
确保变量包含您期望的值。
答案 2 :(得分:0)
你可以像这样使用它:
exclude="aenlever/*"
tar -czf /backups/sites/$siteonly.tar.gz ${dirs[i]} --exclude "tmp/*" --exclude "temp/*" --exclude "cache/*" --exclude "$exclude"