Rsync除外フォルダ

Rsync除外フォルダ

rsyncスクリプトを実行しており、特定のフォルダを除外したいと思います。 rsyncを使用するとファイルを作成し、そこにすべての除外項目を追加する必要があることを知っていますが、.txt私が望むすべての除外項目を含むスクリプトにグローバル文字列を含めてから、そのグローバル文字列をrsyncコマンドに追加できるかどうか疑問に思います。

グローバル文字列の例

ROOT_EXCLUDE="--exclude=/dev --exclude=/proc --exclude=/sys --exclude=/temp --exclude=/run --exlucde=/mnt --exlcude=/media

再同期コマンド

rsync -au --exclude 'ROOT_EXCLUDE' /Users/Me/Home /Users/me/Backup

ベストアンサー1

除外リストの要素にスペースまたはワイルドカードが含まれていない場合は、変数を定義してROOT_EXCLUDEそれを使用できます(引用符を除く)。引用符のない変数拡張は、各空白シーケンス内の変数値を分割し、各要素にワイルドカード文字が含まれている場合はワイルドカードパターンに展開されます。

ROOT_EXCLUDE="--exclude=/dev --exclude=/proc --exclude=/sys --exclude=/temp --exclude=/run --exclude=/mnt --exclude=/media"
rsync -au $ROOT_EXCLUDE /Users/Me/Home /Users/me/Backup

除外リストにワイルドカードを使用する場合は、パターンと一致する名前のファイルがない限り、標準シェルで機能します。こういう言葉で作るには難しい仮定--exclude=*.bakであり、書いてみると通常はそうではありません--exclude *.bak。このようなトラップを回避するには、ワイルドカード拡張をオフにします。

ROOT_EXCLUDE="--exclude=/dev --exclude=*.bak"
set -f
rsync -au $ROOT_EXCLUDE /Users/Me/Home /Users/me/Backup
set +f

配列をサポートするシェル(ksh、bash、zsh、通常のshではない)では、引数リストを次の場所に配置できます。大量に。これはパラメータリストを変数に埋めるのに推奨される方法です。

#!/bin/bash
ROOT_EXCLUDE=('--exclude=/dev' '--exclude=*.bak')
rsync -au "${ROOT_EXCLUDE[@]}" /Users/Me/Home /Users/me/Backup

通常のsh(すべてのBourne / POSIXシェル、たとえば、shまたは)には、次のように設定できるdash名前付き配列(位置引数$1、、$2...)があります。set -- …位置パラメータを一時的に変更する必要がある場合は、関数から一時的に変更してください。各関数呼び出しには一意の位置パラメータセットがあります。

set -- '--exclude=/dev' '--exclude=*.bak'
rsync -au "$@" /Users/Me/Home /Users/me/Backup

-x除外するディレクトリのリストを作成する代わりに、マウントポイントをスキップするオプションを渡す必要があります。などを処理します/proc/sysただし、複数のパーティションにわたってファイルをバックアップするには、すべてのソースを明示的に含める必要があります。ホームディレクトリをバックアップする場合は、スキップするメモリ内ファイルシステムがない可能性がありますが、ネットワークファイルシステムやその他のFUSEファイルシステムがある可能性があります。

rsync -ax /Users/Me/Home /Users/me/Backup

1もっと一般的にはIFS

おすすめ記事