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

时间:2020-03-21 11:45:02  来源:igfitidea点击:

zaloha.sh是一个目录同步器,其突出的小尺寸和简单性。
它实际上是一个bash脚本。
它包含一个文件,zaloha.sh,其大小为125 kB。
大约一半的文件是文档,另一半是程序代码。
Zaloha.sh打开了盒子。
但是,作为shell脚本,它很容易调整以产生最终的非标准解决方案。
使用Zaloha,我们可以轻松同步Linux,UNIX和Microsoft Windows上的文件和目录。

请注意,Zaloha.sh并不像竞争备份解决方案那样丰富,但这些竞争解决方案也是更大,更复杂和黑匣子的。
在内部,zaloha.sh仅使用标准的UNIX命令,例如查找,排序,awk,mkdir,rmdir,cp和rm,以使其工作。
Zaloha.sh在Linux,UNIX和Windows下工作很好地(当然需要Cygwin)。

安装zaloha.sh目录同步器

安装Zaloha是微不足道的。
只需将文件zaloha.sh从GitHub存储库下载并将其移动到$Path,例如/usr/local/bin /。

git clone 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.

$mkdir test1 test2

我在test1目录上有两个名为file1和file2的文本文件。

$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命令查找,AWK,SORT和CP。

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

$ls test1
file1 file2
$ls test2
file1 file2

好吧,它有效!!

与USB闪存驱动器同步

以下步骤在Windows 10计算机上进行了测试,但操作系统的过程相同。

我在笔记本上的所有工作文件集中在C:\Work_data下的目录结构中。
目前它包含几千个不同类型的文件。

我经常备份该目录(相当旧的)2 GB USB闪存驱动器。
当我将USB闪存驱动器插入我的笔记本电脑时,它看起来像驱动器G. USB闪存驱动器上的备份目录为g:\work_backup。

所以,现在实际测试:

最近我一直在与客户的会面上,并从中创建一个单词文档会议_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查找,然后它最终执行多个处理步骤它呈现它要做的事情,要求确认。

文件会议_notes_0109.docx被标记为新的(以黑色)标记为新(以黑色)标记,文件提供_01.xlsx被标记为更新(以红色)标记为更新(以红色)标记。
更新标记的红色警告用户此操作需要更多关注,因为备份目录中的旧数据将被覆盖。

使用"Y"确认提示后,Zaloha.sh执行呈现的操作。

如果我们现在出于好奇,请再次运行上面的命令,我们可以看到zaloha.sh执行分析步骤,然后没有任何内容,因为目录已经同步。

反向同步

现在让我们测试Zaloha.sh的另一个功能,一个"反向同步"。

假设我有一个原因,直接在USB闪存驱动器上工作,我希望我的工作将反向与笔记本相反。

必须由--revnew和-revup选项明确启用此功能。

--revnew选项指示zaloha.sh在备份目录上的备份目录(U盘)上的源目录(Notebook)文件复制到备份目录中,并且较新的Zaloha.sh。

--revup选项指示zaloha.sh复制到备份目录(笔记本)上的源目录(笔记本)文件上存在于两个位置中的备份目录(U盘),并且较新文件位于备份目录中。

我们现在测试它。
我转到USB闪存驱动器(即g:\work_backup \ ikt \ 2017),并在那里创建一个名为meeting_notes_0113.docx的新单词文档。
接下来,我在文件提供的Excel上打开Excel_01.xlsx,做一些编辑并保存。

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

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

可以看出,zaloha.sh确实反向同步会议_notes_0113.docx和优惠_01.xlsx回到笔记本。
再次以红色显示Reply_01.xlsx的Rev.up标记以红色显示,警告用户将被覆盖数据。

进一步的特色

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

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

zaloha.sh包含几种修改其功能的其他选项。
所有这些都在文档中描述。
该文件还致力于Zaloha.sh的内部运作的描述。
这里提到的一个重要项目是zaloha.sh在备份目录下创建一个工作目录.zaloha_metadata,它会保留其临时和元数据文件。