为 OSX 内容备份编写重复文件复制操作脚本

为 OSX 内容备份编写重复文件复制操作脚本

设想:

  1. 使用相机将内容记录到 CF 卡。
  2. 将 CF 卡的内容复制到本地 HD 的命名文件夹(例如 20120311-D01)。我不介意更改脚本来更新我想要使用的名称,不必是自动命名的文件夹。
  3. 将本地 HD 文件夹的内容复制到 USB HD(第二份)。
  4. 清除 CF 卡。

我已将我的旅行套件更新为 MacBook Air,而不是我之前使用的 Windows 系统。在之前的设置中,我使用 robocopy 脚本执行步骤 2 和步骤 3。额外的好处是,步骤 3 设置为镜像操作(同步/更新),因此如果我有时间进行照片或视频后期处理,我可以重新运行,它只会同步更改的文件。

我是 OSX 新手,我的研究技能很差,只知道使用“ditto”或“rsync”,然后被告知要研究“carbon copy cloner”和“superduper”。

简而言之,我想要一种简单的方法将我的 CF 卡的内容复制到我的 Macbook Air,然后再复制到外部 USB 驱动器以确保安全。

答案1

我通常使用 rsync 在脚本上执行 rsync -av /home/source/folder/here /Volumes/Disk1/destination/folder/here,并使用 Lingon 进行调度。Crontab 对我来说确实不起作用,但 Lingon 一直有效。我找到了一个免费的 GPL 下载 2.2,它对我来说运行得很好,但你甚至可以直接从 Mac App Store 购买版本 3,价格为 3 美元。请记住,所有网络驱动器、连接的 USB/Firewire 驱动器都位于 /Volumes 目录中,作为它们自己的文件夹。希望这对您有所帮助!

答案2

你应该尝试的第一件事可能是。您也可以尝试修改这样的 shell 脚本。

#!/bin/bash

dir1=/Volumes/CF/Photos
[[ ! -e "$dir1" ]] && exit

dir2=~/"Pictures/Photos"
mkdir -p "$dir2"

i=1
date="$(date +%Y%m%d)"
target="$dir2/$date-D$(printf %02d $i)"
while [[ -e "$target" ]]; do
    ((++i))
    target="$dir2/$date-D$(printf %02d $i)"
done

mkdir "$target"
mv "$dir1" "$target"
echo "Moved $dir1/ to $target/"

dir3="/Volumes/Backup/Photos"
[[ ! -e "$dir3" ]] && exit
rsync -a "$dir2" "$dir3"
echo "Copied $dir2/ to $dir3/"

为了在每次挂载 CF 卷(或修改其上的某些文件)时运行它,您可以保存像这样的属性列表,~/Library/LaunchAgents/com.superuser.411351.plist并使用 加载它launchctl load ~/Library/LaunchAgents/com.superuser.411351.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.superuser.411351</string>
    <key>Program</key>
    <string>/usr/bin/copyphotos</string>
    <key>WatchPaths</key>
    <array>
        <string>/Volumes/CF/</string>
    </array>
</dict>
</plist>

相关内容