如何使用 Zaloha.sh 同步文件和目录

Zaloha.sh 是一个目录同步器,以其小尺寸和简单性着称。 它实际上是一个 BASH 脚本. 它仅包含一个文件 Zaloha.sh,其大小为 125 KB. 该文件的大约一半是文档,另一半是程序代码。 Zaloha.sh 开箱即用。 然而,作为一个 shell 脚本,它很容易调整以从中创建最终的非标准解决方案。 使用 Zaloha,我们可以轻松地在 Linux、Unix 和 Microsoft Windows 上同步文件和目录。

请注意,Zaloha.sh 不像竞争备份解决方案那样功能丰富,但这些竞争解决方案也更大、更复杂且类似于黑盒。 在内部,Zaloha.sh 只使用标准的 Unix 命令,如 find、sort、awk、mkdir、rmdir、cp 和 rm 来使其工作。 Zaloha.sh 在 Linux、Unix 和 Windows 下本机运行良好(当然需要 Cygwin)。

安装 Zaloha.sh 目录同步器

安装 Zaloha 很简单。 只需从 GitHub 存储库下载文件 Zaloha.sh 并将其移动到 $PATH 即可, example /usr/local/bin/.

Git 克隆 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,请参考 官方安装说明.

使用 Zaloha.sh 在 Linux 上同步文件和目录

Zaloha.sh 的典型用法如下。

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

让我给你看一个简单的 example.

我将创建两个目录,即 测试1测试 2.

$ mkdir test1 test2

我有两个名为 文件 1文件2 在 test1 目录上。

$ ls test1/
file1 file2

并且 test2 目录是空的。

现在,我将使用 Zaloha 同步 test1 和 test2 目录:

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

“是” 接着说。

样本输出:

ANALYZING ./test1/ AND ./test2/
===========================================
Parsing .............................................. done.
find ./test2/.Zaloha_metadata/ -path ./test2/.Zaloha_metadata/999_mark_executed -printf '///tLt%yt%st%Tst%Ft%Dt%it%nt%ut%gt%mt%Pt///t%lt///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 '///tSt%yt%st%Tst%Ft%Dt%it%nt%ut%gt%mt%Pt///t%lt///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 '///tBt%yt%st%Tst%Ft%Dt%it%nt%ut%gt%mt%Pt///t%lt///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 命令—— 寻找, awk, 种类cp.

让我们检查文件是否已同步。

$ ls test1
file1 file2
$ ls test2
file1 file2

好吧,它有效!

同步到 U 盘

以下步骤已在 Windows 10 机器上进行了测试,但该过程对于所有操作系统都是相同的。

我将笔记本上的所有工作文件都集中在一个目录结构中 C:WORK_DATA. 目前它包含数千个不同类型的文件。

我定期将该目录备份到(相当旧的)2 GB USB 闪存驱动器。 当我将该 USB 闪存驱动器插入我的笔记本电脑时,它显示为驱动器 G. U盘上的备份目录是 G:WORK_BACKUP.

所以,现在实际测试:

最近我一直在与客户开会并创建了一个 Word 文档 Meeting_Notes_0109.docx 从中。 我还修改了对该客户的报价,即 Excel 电子表格 报价_01.xlsx.

因此期望 Zaloha.sh 执行这两个文件的备份,而其他文件保持不变。
让我们运行 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 选项指示 Zaloha.sh 复制到备份目录(USB 驱动器)上的源目录(笔记本)文件,这些文件存在于两个位置,较新的文件位于备份目录中。

现在让我们测试一下。 我去 USB 闪存驱动器(即 G:WORK_BACKUPIKT2020)并创建一个新的 Word 文件名为 Meeting_Notes_0113.docx 在那里。 接下来,我打开 Excel 在文件上 报价_01.xlsx,进行一些编辑并保存。

现在让我们使用以下命令行运行 Zaloha.sh:

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

Zaloha 中的反向同步

可以看出,Zaloha.sh 确实反向同步了 Meeting_Notes_0113.docx 和 offer_01.xlsx 回到 notebook。 offer_01.xlsx 的 REV.UP 标记再次显示为红色,提醒用户数据将被覆盖。

更多功能

进一步需要注意的是:需要同步的文件的检测是基于文件修改时间和文件大小,这是许多同步工具常用的方法。 但是,Zaloha.sh 能够执行 逐字节比较 也是。 这可以通过命令行选项激活。

在支持硬链接的文件系统上,Zaloha.sh 能够对硬链接进行重复数据删除,并将硬链接文件仅复制一次到备份目录。 同样,这可以通过命令行选项激活。

Zaloha.sh 包含几个其他选项来修改其功能。 所有都在文档中进行了描述。 该文档还用大量文字描述了 Zaloha.sh 的内部工作原理。 这里要提到的一个重要项目是 Zaloha.sh 创建了一个工作目录 .Zaloha_metadata 在备份目录下,它保存其临时和元数据文件。

建议阅读:

  • 如何在 Linux 中同步本地和远程目录

结论

让 Zaloha.sh 工作确实很容易,尤其是在 Linux 上。 Zaloha.sh 作为一个 shell 脚本,加上其易于调整的特性,可能会在几种可以想象的情况下提供附加值。 有关更多详细信息,请参阅下面给出的 Zaloha GitHub 存储库。 除了 Zaloha.sh 本身之外,该存储库还包含一个简单的演示测试用例、屏幕截图和在线文档。 在线文档与 Zaloha.sh 中的文档相同,但在线版本是 HTML 格式并且更好。

希望这可以帮助。

资源:

感谢您的光临!

帮助我们帮助您:

祝你有美好的一天!!