【发布时间】:2017-02-11 00:05:58
【问题描述】:
我已经编写了一个批处理程序(很久以前)将我的数据从一个外部驱动器备份到另一个驱动器。它扫描驱动器,制作其中所有文件夹的目录文件,并计算行数(以及文件夹数)。从那里它从该文件中读取,一次一行,并将目录文件中列表中每个文件夹的内容复制到另一个驱动器,仅复制上次复制时的新内容或修改的内容,如果有的话位于已从源驱动器中删除的备份驱动器上,它留在了那里。它只是不断添加,而不是删除。这是故意的,别担心。
这是脚本:
@echo off
set /p Drive=The Archive Drive Letter:
cls
set /p Drive2=The Archive II Drive Letter:
dir %Drive%:\ /B >directory
@setlocal enableextensions enabledelayedexpansion
set lines=0
:the
set location=directory
set /a "lines = lines + 1"
set curr=1
for /F "delims=" %%a in ('type %location%') do (
for %%b in (!lines!) do (
if !curr!==%%b set foldername=%%a
)
set /a "curr = curr + 1"
)
xcopy "%drive%:\%foldername%" "%Drive2%:\THE ARCHIVE Backup\%foldername%\" /S /M /Y
timeout -t 2
goto :the
endlocal
我需要帮助来制作一个在 MacOS bash 下运行的相同程序。
我已经尝试了等效的命令并研究了如何在 bash 中完成工作,但我在使用 MacOS 方面的经验非常有限。
我很欣赏在 bash 下的某些操作有所不同,例如驱动器命名。在我上面的批处理脚本中,我调用了一个用户变量来确认驱动器号,但这只是在驱动器号发生变化的情况下(如他们所做的那样)的故障保护。但是在 MacOS 下,驱动器是通过名称调用的,我不会更改它,因此我很乐意删除部分代码。
在我的具体情况下, 源驱动器位于“/Volumes/The ARCHIVE”
目标驱动器位于“/Volumes/The ARCHIVE II”
非常感谢任何帮助,我很乐意接受任何可以改善我处理事情的方法的想法。
谢谢!
编辑:
我运行了命令(使用 -n 开关),在解决了“错误解释器”错误后遇到了一些困难,我返回了源驱动器上所有文件的列表。我假设这将在一次备份后恢复为无,并且只有源驱动器上的后续更改?
另外,我返回了一行,上面写着“总大小为 528045001932”,我假设这是以字节为单位的,因此当转换为千兆字节时为 528GB 或 491GB(取决于每千字节 1024 与 1000 字节)。唯一的问题是,我在源驱动器上的数据总量不止于此。这是否意味着 rsync 丢失了一些数据,或者它跳过了一些数据,因为它在目标驱动器上找到了匹配项?
【问题讨论】:
-
尝试使用
rsync,它包含在bash (man rsync)中... -
感谢 rsync 的建议。我现在试一试,我会让你知道它是如何工作的。这应该比我在 Windows 上的设置要简单得多。
-
rsync不包含在bash中;它是一个完全独立的程序,您可以从bash(或任何其他shell,就此而言)开始。它可能已经安装,也可能尚未安装。 -
我确实注意到了这一点,尤其是在阅读它的手册页时。对我来说,它是随 MacOS 安装的,所以我认为它是和其他人一起安装的,但无论如何感谢您指出这一点:)
标签: bash macos batch-file rsync