Rsyncは、リモートシェルを介して2つの場所間でファイルとフォルダを同期する高速で用途の広いコマンドラインユーティリティです。
Rsyncを使用すると、データをミラーリングし、増分バックアップを作成し、システム間でファイルをコピーできます。データをコピーするときは、名前や場所に基づいて1つ以上のファイルまたはディレクトリを除外することをお勧めします。
このチュートリアルでは、rsyncを使用してファイルとディレクトリを除外する方法を示します。
rsyncがどのように機能するかについての基本的な知識が必要です。
以下の例では、-a
でrsyncを使用します 、 オプション。これにより、rsyncはディレクトリを再帰的に同期し、特別なデバイスとブロックデバイスを転送し、シンボリックリンク、変更時間、グループ、所有権、およびアクセス許可を保持するように指示されます。
ファイルまたはディレクトリを除外する場合は、ソースディレクトリへの相対パスを使用する必要があります。
除外するファイルとディレクトリを指定するには、次の2つのオプションがあります。
- コマンドラインから 、
--exclude
を使用 オプション。 - ファイルから 、
--exclude-from
を使用 オプション。
特定のファイルを除外するには、ファイルへの相対パスを--exclude
に渡します オプション。
次の例では、ファイルsrc_directory/file.txt
転送されません:
rsync -a --exclude 'file.txt' src_directory/ dst_directory/
特定のディレクトリを除外することは、ファイルを除外することと同じです。ディレクトリへの相対パスを--exclude
に渡すだけです。 以下に示すオプション:
rsync -a --exclude 'dir1' src_directory/ dst_directory/
ディレクトリの内容を除外したいが、ディレクトリ自体は除外したくない場合は、dir1/*
を使用します。 dir1
の代わりに :
rsync -a --exclude 'dir1/*' src_directory/ dst_directory/
複数のファイルまたはディレクトリを除外する#
複数のファイルまたはディレクトリを除外するには、複数の--exclude
を指定するだけです。 オプション:
rsync -a --exclude 'file1.txt' --exclude 'dir1/*' --exclude 'dir2' src_directory/ dst_directory/
単一の--exclude
を使用する場合 オプションで、除外するファイルとディレクトリを中括弧でリストできます{}
以下に示すように、コンマで区切ります:
rsync -a --exclude={'file1.txt','dir1/*','dir2'} src_directory/ dst_directory/
複数の--exclude
を使用する代わりに、除外するファイルやディレクトリの数が多い場合 オプションでは、ファイル内で除外するファイルとディレクトリを指定し、そのファイルを--exclude-from
に渡すことができます。 オプション。
以下のコマンドは、上記のコマンドとまったく同じです。
rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/
Exclusive-file.txt file1.txt
dir1/*
dir2
パターンに基づいて複数のファイルまたはディレクトリを除外する#
rsyncを使用すると、ファイル名またはディレクトリ名に一致するパターンに基づいてファイルとディレクトリを除外することもできます。
たとえば、すべての.jpg
を除外するには 実行するファイル:
rsync -a --exclude '*.jpg*' src_directory/ dst_directory/
特定のパターンに一致するものを除いて、他のすべてのファイルとディレクトリを除外するのは少し難しいです。 .jpg
で終わるファイルを除く他のすべてのファイルとディレクトリを除外するとします。 。
1つのオプションは、次のコマンドを使用することです。
rsync -a -m --include='*.jpg' --include='*/' --exclude='*' src_directory/ dst_directory/
複数の包含/除外オプションを使用する場合、最初の一致ルールが適用されます。
-
--include='*.jpg'
-まず、すべての.jpg
を含めます ファイル。 -
--include='*/'
-次に、src_directory
内のすべてのディレクトリを含めます ディレクトリ。このrsyncがないと、*.jpg
のみがコピーされます トップレベルディレクトリ内のファイル。 -
-m
-空のディレクトリを削除します。
もう1つのオプションは、find
の出力をパイプすることです。 commandto rsync:
find src_directory/ -name "*.jpg" -printf %P\\0\\n | rsync -a --files-from=- src_directory/ dst_directory/
-
-printf %P\\0\\n
-src_directory/
を削除します ファイルパスから。 -
--files-from=-
-標準入力からのファイル(findコマンドから渡されたファイル)のみを含めることを意味します。
結論#
このチュートリアルでは、Rsyncでデータを転送するときにファイルとディレクトリを除外する方法を学びました。 RsyncユーザーズマニュアルページでRsyncについて学ぶことはもっとたくさんあります。