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

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

Rsync は、バックアップを作成したり、2 つの異なる場所 (またはサーバー) 間でファイルやディレクトリを同期したりするための非常に強力なツールです。

以前に rsync に関する実用的な例を紹介したので、これはもうご存知でしょう。

典型的なバックアップ状況では、バックアップから 1 つ以上のファイル (またはディレクトリー) を除外したい場合があります。特定のファイル タイプを rsync から除外することもできます。

この記事では、rsync 中に複数のファイルやディレクトリを無視する方法について、例を挙げて説明します。

最初に、以下に示すように、テスト目的で使用できるサンプル ディレクトリ構造を (いくつかの空のファイルを使用して) 作成します。

$ cd ~
$ mkdir -p source/dir1/dir2
$ mkdir -p source/dir3
$ touch source/file1.txt
$ touch source/file2.txt
$ touch source/dir1/dir2/file3.txt
$ touch source/dir3/file4.txt

上記のコマンドは、次の構造を持つソース ディレクトリ (ホーム ディレクトリの下) を作成します。

source
- file1.txt
- file2.txt
- dir1
  - dir2
    - file3.txt
- dir3
  - file4.txt

1.特定のディレクトリを除外

dir1 (そのすべてのサブディレクトリを含む) をソースから宛先フォルダーに同期したくない場合は、以下に示すように rsync –exclude オプションを使用します。

$ rm -rf destination

$ rsync -avz --exclude 'dir1' source/ destination/
building file list ... done
created directory dest
./
file1.txt
file2.txt
dir3/
dir3/file4.txt

dir1 がソース ディレクトリから宛先ディレクトリにコピーされていないことを確認してください。

$ find destination
destination
destination/file2.txt
destination/file1.txt
destination/dir3
destination/dir3/file4.txt

2.パターンに一致する複数のディレクトリを除外

次の例では、パターン「dir*」に一致する source/ の下のディレクトリ (またはサブディレクトリ) を除外します。

$ rm -rf destination

$ rsync -avz --exclude 'dir*' source/ destination/
building file list ... done
created directory destination
./
file1.txt
file2.txt

宛先ディレクトリを検証して、キーワード「dir」を含むディレクトリがコピーされていないことを確認してください。

$ find destination
destination
destination/file2.txt
destination/file1.txt

3.特定のファイルを除外

特定のファイルを除外するには、以下に示すように、除外オプションでファイルの相対パスを使用します。

$ rm -rf destination

$ rsync -avz --exclude 'dir1/dir2/file3.txt' source/ destination/
building file list ... done
created directory destination
./
file1.txt
file2.txt
dir1/
dir1/dir2/
dir3/
dir3/file4.txt

宛先ディレクトリを確認して、特定のファイル (この例では dir1/dir2/file3.txt) がコピーされていないことを確認します。

$ find destination
destination
destination/file2.txt
destination/file1.txt
destination/dir1
destination/dir1/dir2
destination/dir3
destination/dir3/file4.txt

4.除外パスは常に相対です

注意しないと、この間違いを犯す可能性があります。

次の例では、除外オプションにフル パス (つまり、/dir1/dir2/file3.txt) が指定されているようです。ただし、rsync の観点からは、除外パスは常に相対パスであり、dir1/dir2/file3.txt として扱われます。以下の例では、rsync はソース ディレクトリ (/ ルート ディレクトリではなく) の下で dir1 を探します。

$ rsync -avz --exclude '/dir1/dir2/file3.txt' source/ destination/

したがって、上記のコマンドは次のコマンドとまったく同じです。混乱を避けるために (そして読みやすくするために)、除外パスの前に / を付けないでください。

$ rsync -avz --exclude 'dir1/dir2/file3.txt' source/ destination/

5.特定のファイル タイプを除外する

特定の拡張子を持つ特定のファイルの種類を除外するには、適切なパターンを使用します。たとえば、拡張子として .txt を含むすべてのファイルを除外するには、次のようにします。

$ rsync -avz --exclude '*.txt' source/ destination/
building file list ... done
created directory destination
./
dir1/
dir1/dir2/
dir3/

宛先ディレクトリを確認して、*.txt ファイルがコピーされていないことを確認してください。

$ find destination
destination
destination/dir1
destination/dir1/dir2
destination/dir3

注: 上記は、ホーム ディレクトリをバックアップしたいが、特定のファイル拡張子を持つ巨大な画像や動画ファイルをすべて除外したい場合に非常に役立ちます。

6.複数のファイルとディレクトリを同時に除外

複数のファイルとディレクトリを除外する場合は、以下に示すように、コマンド ラインでいつでも複数の rsync 除外オプションを指定できます。

$ rsync -avz --exclude file1.txt --exclude dir3/file4.txt source/ destination/

待って。 rsync から除外したいファイルが大量にある場合はどうすればよいですか?

複数の –exclude を使用してコマンド ラインにそれらを追加し続けることができず、読みにくく、後で rsync コマンドを再利用するのが困難です。

そのため、より良い方法は、以下に示すように rsync –exclude-from オプションを使用することです。ここでは、ファイルで除外するすべてのファイル (およびディレクトリ) を一覧表示できます。

まず、バックアップしたくないすべてのファイルとディレクトリのリストを含むテキスト ファイルを作成します。これは、rsync から除外するファイルとディレクトリのリストです。

$ vim exclude-list.txt
file1.txt
dir3/file4.txt

次に、以下に示すように、exclude-list.txt で –exclude-from オプションを使用して rsync を実行します。

$ rm -rf destination

$ rsync -avz --exclude-from 'exclude-list.txt' source/ destination/
building file list ... done
created directory destination
./
file2.txt
dir1/
dir1/dir2/
dir1/dir2/file3.txt
dir3/

宛先ディレクトリを確認して、exclude-list.txt ファイルにリストされているファイルとディレクトリがバックアップされていないことを確認してください。

$ find destination
destination
destination/file2.txt
destination/dir1
destination/dir1/dir2
destination/dir1/dir2/file3.txt
destination/dir3

Linux
  1. TarとOpenSSLを使用してファイルとディレクトリを暗号化および復号化する方法

  2. CloudCross –ファイルとディレクトリを複数のクラウドストレージと同期する

  3. rsyncを使用してファイルを同期する

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

  2. Linux ファイルとディレクトリの削除

  3. Rsync の include および exclude オプションを使用して、パターンごとにディレクトリとファイルを含める

  1. Rsyncを使用してファイルを送信およびダウンロードする方法

  2. Linux および Unix でファイルをコピーする方法10 cp コマンドの例

  3. 特定のファイルを除外しながらrsyncを使用してディレクトリを再帰的にコピーする方法