
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
この機能をサポートするシェル)に保存することもできます。これはスクリプトを書くときに便利です。bash
ksh
yash
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: