ループの bash は特定のサブディレクトリを除外します。

ループの bash は特定のサブディレクトリを除外します。

二重性を使用してディレクトリバックアップを実行するスクリプトがあります。 "for"ループからいくつかのサブディレクトリを除外しようとしています。どうやってこれを達成できますか?

現在のスクリプト

backup_volume() { TARGET_URL=$1
   for vol in /dir/*; do
      VOLUME=$(basename $vol)
      duplicitiy backupcommand...
   done
}

/dir/内に除外したいサブディレクトリがあります。どんなアドバイスでもいただければ幸いです!

ベストアンサー1

duplicity除外ディレクトリを学ぶ

duplicity --exclude=/dir/somedir/someotherdir/dontbackup ...other options...

/dir(全体をバックアップするために一度実行されます)

各サブディレクトリに対して別々のバックアップを作成する必要がある場合は、/dirまずパターンを使用してサブディレクトリが一致していることを確認して/dir/*/から、避けたいファイル名とディレクトリのファイル名をテストします。

for vol in /dir/*/; do
    case $vol in
        */somedirectory/)    continue ;;
        */someotherdirtory/) continue ;;
    esac

    volume=$( basename "$vol" )

    duplicity ...
done

または、

for vol in /dir/*/; do
    volume=$( basename "$vol" )

    case $volume in
        somedirectory)    continue ;;
        someotherdirtory) continue ;;
    esac

    duplicity ...
done

または、

for vol in /dir/*/; do
    volume=$( basename "$vol" )

    case $volume in
        somedirectory|someotherdirectory|more here)    continue ;;
    esac

    duplicity ...
done

または、拡張グロービングモードを使用してくださいbash

shopt -s extglob

for vol in /dir/!(somedirectory|someotherdirectory|...)/
    volume=$( basename "$vol" )
    duplicity ...
done

おすすめ記事