1. ホーム
  2. linux

[解決済み] rsyncでincludeオプションを使って特定の種類のファイルだけをコピーオーバーする

2022-04-28 19:01:17

質問

以下のbashスクリプトを使って、特定の拡張子(ここでは*.sh)のファイルだけをコピーするようにしていますが、それでもすべてのファイルがコピーされます。

from=$1
to=$2

rsync -zarv --include="*.sh" $from $to

解決方法は?

私が思うに --include で除外されるファイルのサブセットを含めるために使用されます。 --exclude というのは、これらのファイルだけを含めるのではありません。 言い換えれば、次のように考える必要があります。 インクルード 意味 を除外してはいけません。 .

代わりに試してみてください。

rsync -zarv  --include "*/" --exclude="*" --include="*.sh" "$from" "$to"

rsync バージョン 3.0.6 以降では、以下のように順番を変更する必要があります (コメント参照)。

rsync -zarv --include="*/" --include="*.sh" --exclude="*" "$from" "$to"

を追加します。 -m フラグを使用すると、宛先に空のディレクトリ構造を作成することを回避できます。バージョン 3.1.2 でテスト済みです。

したがって、*.sh ファイルだけが必要な場合は、すべてのファイルを除外しなければなりません。 --exclude="*" すべてのディレクトリを含む --include="*/" およびすべての *.sh ファイルをインクルードする --include="*.sh" .

のセクションで良い例を見つけることができます。 Include/Exclude パターンルール マンページ