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

コマンド ライン ツールを使用して 2 つのフォルダーを同期する方法

これにより、フォルダ A がフォルダ B に配置されます:

rsync -avu --delete "/home/user/A" "/home/user/B"  

フォルダ A と B の内容が必要な場合 同じにするために、08 を入れます (スラッシュ付き) ソースとして。これは、フォルダ A ではなく、そのすべてのコンテンツを取得して、フォルダ B に入れます。次のように:

rsync -avu --delete "/home/user/A/" "/home/user/B"
  • 15 すべてのファイルシステム属性を保持して同期を行う
  • 24 詳細に実行
  • 32 変更時刻が新しい (または時刻が同じ場合はサイズが異なる) ファイルのみをコピーします
  • 49 ソースに存在しないターゲット フォルダー内のファイルを削除します

マンページ:https://download.samba.org/pub/rsync/rsync.html


55 できます U Penn の Benjamin Pierce によって開発されたツール。

2 つのディレクトリがあるとします。

6971

これら 2 つを同期するには、次を使用できます。

~$84

出力では、91 異なるすべてのディレクトリとファイルを表示します 同期するように要求した 2 つのディレクトリにあります。最初の実行で加算同期 (両方の場所で不足しているファイルを複製する) を推奨し、次にマシンで同期ツリーを作成して維持します。その後の実行では、真の同期を実装します (つまり、104111 から削除されます 同じように。また、すべての変更を比較し、オプションで 転送 を選択することもできます または 2 つのディレクトリ間で同期します。

必要に応じて、グラフィカル インターフェイスを起動するには、単に 122 を削除します コマンドのオプションですが、137 が見つかりました より簡単かつ迅速に使用できます。

詳細:Unison ユーザー ドキュメントの Unison チュートリアル。


TuxForLife からの回答はかなり良いですが、 145 を使用することを強くお勧めします ローカルで同期する場合。リモート同期のためにそれを行うのは時間/ネットワークのペナルティに値しないと主張することができますが、速度が非常に優れているため、ローカルファイルには完全に価値があります.

-c, --checksum
       This forces the sender to checksum every regular file using a 128-bit  MD4
       checksum.   It  does this during the initial file-system scan as it builds
       the list of all available files. The receiver then checksums  its  version
       of  each  file  (if  it exists and it has the same size as its sender-side
       counterpart) in order to decide which files need to be updated: files with
       either  a  changed  size  or a changed checksum are selected for transfer.
       Since this whole-file checksumming of all files on both sides of the  con-
       nection  occurs  in  addition to the automatic checksum verifications that
       occur during a file's transfer, this option can be quite slow.

       Note that rsync always verifies that each transferred file  was  correctly
       reconstructed  on  the receiving side by checking its whole-file checksum,
       but that automatic after-the-transfer verification has nothing to do  with
       this  option's  before-the-transfer  "Does  this file need to be updated?"
       check.

これは、同じサイズとタイム スタンプを使用すると失敗する可能性があることを示しています。

セットアップ

$ cd /tmp

$ mkdir -p {A,b}/1/2/{3,4}

$ echo "\___________from A" | \
      tee A/1/2/x  | tee A/1/2/3/y  | tee A/1/2/4/z  | \
  tr A b | \
      tee b/1/2/x  | tee b/1/2/3/y  | tee b/1/2/4/z  | \
      tee b/1/2/x0 | tee b/1/2/3/y0 >     b/1/2/4/z0

$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from b
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from b
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from b
b/1/2/x0
\___________from b

すべてのファイルのサイズとタイムスタンプが同じであるため、何もコピーしない rsync

$ rsync -avu A/ b
building file list ... done

sent 138 bytes  received 20 bytes  316.00 bytes/sec
total size is 57  speedup is 0.36

$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from b
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from b
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from b
b/1/2/x0
\___________from b    

チェックサムを比較するため、正しく機能する rsync

$ rsync -cavu A/ b
building file list ... done
1/2/x
1/2/3/y
1/2/4/z

sent 381 bytes  received 86 bytes  934.00 bytes/sec
total size is 57  speedup is 0.12

$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from A
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from A
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from A
b/1/2/x0
\___________from b

Linux
  1. bashでファイルをファイルタイプ別にフォルダにソートする方法(「file」コマンドを使用)?

  2. Linuxでコマンドラインを使用してPDFをJPGに変換するには?

  3. コマンドラインツールのみを使用して Linux で DjVu ドキュメントを PDF に変換するにはどうすればよいですか?

  1. Linux –コマンドラインツールで2つのフォルダを同期する方法は?

  2. bash で 2 つのローカル フォルダーを同期する

  3. コマンドラインから特定のサイズのファイルを作成するにはどうすればよいですか?

  1. コマンドラインを使用してLinuxを再起動する方法

  2. Linuxコマンドラインで特定の拡張子を持つファイルを削除する方法

  3. Linuxでjar内のファイルをコマンドラインに置き換える方法は?