1

tar コマンドを起動する bash スクリプトを作成しようとしています。可変パラメーターを持つ 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/*"変数が考慮されていないと思います...変数をパラメーターとして受け入れるようにする方法はありますか?

4

3 に答える 3

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
于 2013-09-10T17:47:40.737 に答える
0

変数に期待する値が含まれていることを確認するecho _${exclude}_前に、必要になる場合があります。tar

于 2013-09-10T17:43:48.417 に答える