Rsync:複数のファイルとディレクトリをすばやく除外する方法はありますか?

Rsync:複数のファイルとディレクトリをすばやく除外する方法はありますか?

rsyncを使用して複数のファイルとディレクトリをすばやく除外する方法はありますか?

以下は私のコードです。

rsync -avzh . blabla@blabla:~/ --exclude=__pycache__ --exclude=checkpoints --exclude=logs --exclude=.git --exclude=plot

各ファイル(ディレクトリ)に対して明示的に宣言する必要があります。長すぎると思います。

答え1

rsync文書(参考資料を参照man rsync--exclude-fromには、ファイルから除外リストを指定できるパラメーターがあります。

/除外例のセットに関して、ディレクトリの後には指定されていないファイルやディレクトリではないディレクトリであることを示し、ホームディレクトリ自体のディレクトリは/他のディレクトリと同じでないようにプレフィックスを付ける必要があります。一致しません。

除外ファイルでは、次のようにリストできます。

# Directories found anywhere
__pycache__/
checkpoints/
logs/
plot/

# Directories found only in HOME
/.git/

答え2

を使用している場合は、bash次のものを使用できます。支柱の拡張--exclude=xxx複数のオプションに拡張されます。

rsync -avzh --exclude={__pycache__,checkpoints,logs,.git,plot} . blabla@blabla:~/ 

答え3

除外したいすべての可能なディレクトリ/ファイルと一致するパターンを定式化できない限り、私が考えることができる唯一の他の方法は--exclude-from=filename

パターンを配列(、、またはzshこの機能をサポートするシェル)に保存することもできます。これはスクリプトを書くときに便利です。bashkshyash

exclude=( __pycache__ checkpoints logs .git plot )

for pattern in "${exclude[@]}"; do
    exclude=( "${exclude[@]:1}" --exclude="$pattern" )
done

rsync --archive --verbose --compress --human-readable \
    "${exclude[@]}" \
    . blabla@blabla:

または、位置引数を使用します(タイピングが少なく、すべてのPOSIXシェルに移植可能)。

set -- __pycache__ checkpoints logs .git plot

for pattern do
    set -- "$@" --exclude="$pattern"
    shift
done

rsync --archive --verbose --compress --human-readable \
    "$@" \
    . blabla@blabla:

関連情報