GNU/Linux >> Linux の 問題 >  >> Linux

Rsyncでファイルとディレクトリを除外する方法

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について学ぶことはもっとたくさんあります。


Linux
  1. Linuxでのコピーから特定のディレクトリを除外する方法

  2. Linuxでファイルとディレクトリをアーカイブする方法[パート2]

  3. SCPとRsyncでファイルをコピーする

  1. Linuxでファイルとディレクトリを圧縮する方法(例付き)

  2. SCP と Rsync を使用して Linux でファイルを転送する方法

  3. exclude-from を使用して複数のファイルとディレクトリを除外する 6 つの rsync の例

  1. Linuxでファイルとディレクトリをコピーする方法

  2. 「cp」および「mv」コマンドを使用してLinuxでファイルとディレクトリをコピー/移動する方法

  3. rsync を使用してデフォルトでファイルを除外するにはどうすればよいですか?