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

Zaloha.shを使用してファイルとディレクトリを同期する方法

Zaloha.sh は、その小さなサイズとシンプルさで際立っているディレクトリシンクロナイザーです。これは実際にはBASHスクリプトです 。サイズが125kBのZaloha.shという1つのファイルのみで構成されています。 。そのファイルの約半分はドキュメントであり、残りの半分はプログラムコードです。 Zaloha.shはすぐに使用できます。ただし、シェルスクリプトとして、最終的に非標準のソリューションを作成するように簡単に調整できます。 Zalohaを使用すると、Linux、Unix、およびMicrosoftWindows上のファイルとディレクトリを簡単に同期できます。

Zaloha.shは、競合するバックアップソリューションほど機能が豊富ではありませんが、これらの競合するソリューションは、より大きく、より複雑で、ブラックボックスのようなものであることに注意してください。内部的には、Zaloha.shは、find、sort、awk、mkdir、rmdir、cp、rmなどの標準のUnixコマンドのみを使用して機能させます。 Zaloha.shは、Linux、Unix、およびWindowsでネイティブに機能します(もちろん、Cygwinが必要です)。

Zaloha.shディレクトリシンクロナイザーのインストール

Zalohaのインストールは簡単です。 GitHubリポジトリからファイルZaloha.shをダウンロードし、それを$ PATH(たとえば、 / usr / local / bin / )に移動するだけです。 。

Zalohaリポジトリのクローンを作成し、コマンドを使用してZaloha.shファイルを$PATHに移動します。

$ git clone https://github.com/Fitus/Zaloha.sh.git
$ sudo mv Zaloha.sh/Zaloha.sh /usr/local/bin/zaloha.sh

最後に、実行可能にします:

$ sudo chmod +x /usr/local/bin/zaloha.sh

Windowsでは、スクリプトを適切なローカルディレクトリにダウンロードします。ディレクトリC:\TOOLSに配置することにしました。

Windowsでは、追加の手順として、 CygWin インストールする必要があります。ノートブックにはすでにCygWinがインストールされています。 CygWinをまだインストールしていない場合は、公式のインストール手順を参照してください。

Zaloha.shを使用してLinux上のファイルとディレクトリを同期する

Zaloha.shの一般的な使用法は次のとおりです。

$ zaloha.sh --sourceDir=<path_to_dir> --backupDir=<path_to_dir>

簡単な例を示しましょう。

test1という2つのディレクトリを作成します およびテスト2

$ mkdir test1 test2

file1という2つのテキストファイルがあります およびfile2 test1ディレクトリにあります。

$ ls test1/
file1 file2

そして、test2ディレクトリは空です。

次に、Zalohaを使用してtest1ディレクトリとtest2ディレクトリを同期します。

$ zaloha.sh --sourceDir=test1/ --backupDir=test2/ --color

「y」を押します 続行します。

出力例:

ANALYZING ./test1/ AND ./test2/
===========================================
Parsing .............................................. done.
find ./test2/.Zaloha_metadata/ -path ./test2/.Zaloha_metadata/999_mark_executed -printf '///\tL\t%y\t%s\t%Ts\t%F\t%D\t%i\t%n\t%u\t%g\t%m\t%P\t///\t%l\t///\n'
find ./test1/ -path ./test1/.Zaloha_metadata -prune -o -ipath './test1/$RECYCLE.BIN' -prune -o -path './test1/.Trash-[0-9]*' -prune -o -path ./test1/lost+found -prune -o -printf '///\tS\t%y\t%s\t%Ts\t%F\t%D\t%i\t%n\t%u\t%g\t%m\t%P\t///\t%l\t///\n'
find ./test2/ -path ./test2/.Zaloha_metadata -prune -o -ipath './test2/$RECYCLE.BIN' -prune -o -path './test2/.Trash-[0-9]*' -prune -o -path ./test2/lost+found -prune -o -printf '///\tB\t%y\t%s\t%Ts\t%F\t%D\t%i\t%n\t%u\t%g\t%m\t%P\t///\t%l\t///\n'
Cleaning ............................................. done.
Checking ............................................. done.
Sorting (2) .......................................... done.
Differences processing ...............................
Zaloha AWK: Warning: No last run of Zaloha found (this is OK if this is the first run)
done.
Sorting (3) .......................................... done.
Post-processing and splitting off Exec1 and Exec4 .... done.
Sorting (4) and selecting Exec2 ...................... done.
Preparing shellscript for Exec1 ...................... done.
Preparing shellscript for Exec2 ...................... done.
Preparing shellscript for Exec4 ...................... done.
Preparing shellscript to touch file 999 .............. done.
Preparing shellscripts for case of restore ........... done.

TO BE COPIED TO ./test2/
===========================================
NEW file1
NEW file2

Execute above listed copies to ./test2/ ? [Y/y=Yes, other=do nothing and abort]: y

cp --preserve=timestamps ./test1/file1 ./test2/file1
cp --preserve=timestamps ./test1/file2 ./test2/file2

TO BE REMOVED FROM ./test2/
===========================================

上記の出力でわかるように、Zalohaは標準のUnixコマンドを使用します- find awk 並べ替え およびcp

ファイルが同期されているかどうかを確認しましょう。

$ ls test1
file1 file2
$ ls test2
file1 file2

まあ、それはうまくいきます!!

USBフラッシュドライブへの同期

次の手順はWindows10マシンでテストされていますが、手順はすべてのオペレーティングシステムで同じです。

ノートブック上のすべての作業ファイルをC:\ WORK_DATAの下のディレクトリ構造に集中させています 。現在、さまざまな種類の数千のファイルが含まれています。

私は定期的にそのディレクトリを(かなり古い)2GBのUSBフラッシュドライブにバックアップしています。そのUSBフラッシュドライブをノートブックに接続すると、ドライブ Gとして表示されます 。 USBフラッシュドライブのバックアップディレクトリはG:\ WORK_BACKUPです。 。

では、実際のテスト:

最近、私は顧客との会議に参加し、Word文書 Meeting_Notes_0109.docxを作成しました。 それから。また、その顧客へのオファーを修正しました。これは、Excelスプレッドシート offer_01.xlsxです。 。

したがって、Zaloha.shがこれら2つのファイルのバックアップを実行し、他のファイルは変更されないままにすることが期待されます。
Zaloha.shを実行して確認してみましょう:

$ /c/TOOLS/Zaloha.sh --sourceDir="/c/WORK_DATA" --backupDir="/cygdrive/g/WORK_BACKUP" --color

出力例:

Zaloha.shは、C:\ WORK_DATA(CygWin / c / WORK_DATAの下)とG:\ WORK_BACKUP(CygWin / cygdrive / g / WORK_BACKUPの下)の両方のディレクトリでUnix findを実行し、最後にいくつかの処理ステップを実行することがわかります。確認を求めて、それが何をしようとしているのかを示します。

ファイルMeeting_Notes_0109.docxはNEW(黒色)としてタグ付けされ、ファイルoffer_01.xlsxはUPDATE(赤色)としてタグ付けされています。 UPDATEタグの赤い色は、バックアップディレクトリ内の古いデータが上書きされるため、この操作にはさらに注意が必要であることをユーザーに警告します。

「y」でプロンプトを確認した後、Zaloha.shは提示された操作を実行します。

好奇心から上記のコマンドを再度実行すると、ディレクトリがすでに同期されているため、Zaloha.shが分析手順を実行し、その後何も実行しないことがわかります。

逆同期

次に、Zaloha.shの別の機能である「逆同期」をテストしてみましょう。 。

何らかの理由で、USBフラッシュドライブで直接作業する必要があり、作業をノートブックに逆同期させたいと仮定します。

この機能は、-revNewによって明示的に有効にする必要があります および--revUp オプション。

--revNewオプションは、バックアップディレクトリにのみ存在し、Zaloha.shの最後の実行よりも新しいバックアップディレクトリ(USBドライブ)上のソースディレクトリ(ノートブック)ファイルにコピーするようにZaloha.shに指示します。

--revUpオプションは、両方の場所に存在し、新しいファイルがバックアップディレクトリにあるバックアップディレクトリ(USBドライブ)上のソースディレクトリ(ノートブック)ファイルにコピーするようにZaloha.shに指示します。

それをテストしてみましょう。 USBフラッシュドライブ(G:\ WORK_BACKUP \ IKT \ 2020など)に移動し、 Meeting_Notes_0113.docxという名前の新しいWordドキュメントを作成します。 そこで。次に、ファイル offer_01.xlsxでExcelを開きます。 、編集して保存します。

次に、次のコマンドラインを使用してZaloha.shを実行しましょう。

$ /c/TOOLS/Zaloha.sh --sourceDir="/c/WORK_DATA" --backupDir="/cygdrive/g/WORK_BACKUP" --color --revNew --revUp

Zaloha.shが実際にMeeting_Notes_0113.docxとoffer_01.xlsxをノートブックに逆同期したことがわかります。この場合も、offer_01.xlsxのREV.UPタグが赤色で表示され、データが上書きされることをユーザーに警告します。

その他の機能

さらに注意する必要があること:同期が必要なファイルの検出は、ファイルの変更時間とファイルサイズに基づいています。これは、多くの同期ツールで使用される通常の方法です。ただし、Zaloha.shはバイトごとの比較を実行できます。 同じように。これは、コマンドラインオプションでアクティブにできます。

ハードリンクをサポートするファイルシステムでは、Zaloha.shはハードリンクの複製を解除し、ハードリンクされたファイルをバックアップディレクトリに1回だけコピーできます。繰り返しますが、これはコマンドラインオプションでアクティブにできます。

Zaloha.shには、その機能を変更するための他のいくつかのオプションが含まれています。すべてドキュメントに記載されています。ドキュメントはまた、Zaloha.shの内部動作の説明にかなりの量のテキストを捧げています。ここで言及する重要な項目の1つは、Zaloha.shが作業ディレクトリ .Zaloha_metadataを作成することです。 バックアップディレクトリの下に、一時ファイルとメタデータファイルが保存されます。

推奨される読み物:

  • Linuxでローカルディレクトリとリモートディレクトリを同期する方法

結論

Zaloha.shを機能させるのは、特にLinuxでは確かに簡単です。 Zaloha.shは、シェルスクリプトであるため簡単に調整できるほか、考えられるいくつかの状況で付加価値を提供する可能性があります。詳細については、以下のZalohaGitHubリポジトリを参照してください。リポジトリには、Zaloha.sh自体に加えて、簡単なデモテストケース、スクリーンショット、およびオンラインドキュメントが含まれています。オンラインドキュメントはZaloha.sh内のドキュメントと同じですが、オンラインバージョンはHTML形式であり、より優れています。

これがお役に立てば幸いです。


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

  2. Ubuntu20.04でLsyncdを使用してディレクトリを同期する方法

  3. Linuxでローカルディレクトリとリモートディレクトリを同期する方法

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

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

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

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

  2. Linuxを使用してディレクトリとファイルを削除する方法

  3. Linux で gzip と bzip2 を使用してファイルとディレクトリを圧縮および抽出する方法