tar 备份 zsh 脚本

tar 备份 zsh 脚本

尝试设置一个 cronjob,每晚运行 tar 脚本来备份站点(不带 .git 和设置文件夹),并将带有时间戳的档案上传到 Dropbox。

这让我很为难,因为存档和其中的所有内容一起创建,似乎排除标志现在由于某种原因不起作用了。也许是 zsh 的字符转义问题,不确定,仍在学习。请帮忙。

#!/bin/zsh

DATE=`date +%d-%m-%Y---%H-%M-%S`
FILE=backup-$DATE.tar.bz2
DROPBOX=/home/pentago/appz/bin/dropbox.py 
TARGET=/home/pentago/public_html/
DESTINATION=/home/pentago/Dropbox/Backups
EXCLUDED={setup,.git*}


tar -cpPf $FILE --exclude=$EXCLUDED $TARGET{*,.*}

答案1

您的脚本中存在一些问题。您需要添加选项j才能tar创建 bzip2 文件。我认为排除命令被忽略了,因为您明确添加了全部将目标中的文件添加到 tar 的输入文件列表中。您不需要$TARGET/*简单地$TARGET这样做。最后,排除的 blob 可能正在当前目录中扩展,而不是在目标目录中。

尝试这样的操作:

#!/bin/zsh

DATE=`date +%d-%m-%Y---%H-%M-%S`
FILE=backup-$DATE.tar.bz2
DROPBOX=/home/pentago/appz/bin/dropbox.py 
TARGET=/home/pentago/public_html/
DESTINATION=/home/pentago/Dropbox/Backups



tar -cjpPf $FILE --exclude=setup --exclude=.git $TARGET

答案2

您确实应该使用 git-archive 来实现这一点。

git archive -o $FILE HEAD

为避免包含,setup您需要export-ignore在其上设置属性。请参阅man gitattributesman git-archive(大量示例)。请注意,这假设设置已签入,否则您无需执行任何操作。

相关内容