3

不久前我制作了一个脚本,zip用于压缩几个不同的用户指定目录。脚本这样做的方式是读取目录config.txt并单独压缩每个目录。碰巧的是,对于我的使用,所有这些目录都在同一个父目录中。例如,我的目录中有以下/Users/username/目录:

Desktop
Documents
Pictures

有没有办法将这三个组合在同一个档案中?

作为参考,这是我当前的脚本:

BKUPDATE="/Users/michaelgarrison/Backup/BKUP_"$(date +%Y)-$(date +%m)-$(date +%d)

# Create the Backup directory if it does not exist
mkdir -p $BKUPDATE

# File where directories are specified
CONFIG="config.txt"

while read SOURCE
do
    DESTINATION="/Users/michaelgarrison/"
    OUTPUT=$BKUPDATE"/Backup_"$SOURCE"_"$(date +%Y)-$(date +%m)-$(date +%d)".zip"
    (cd /Users/michaelgarrison/; zip -r $OUTPUT $SOURCE)
done < $CONFIG
4

3 回答 3

11

zip -r backup Desktop/* Documents/* Pictures/*

这会将桌面、文档和图片下的所有文件压缩到一个名为backup.zip

各种技巧是从 config.txt 文件中读取列表,大概是一个垂直列表或数组,并使其成为一个长字符串。

于 2013-03-25T17:04:43.777 回答
1

请阅读评论和答案,他们很好地回答了您的问题!

  • 把不断的事情排除在循环之外

OUTPUT="/Users/michaelgarrison/"$BKUPDATE"/Backup_"$(date +"%Y-%m-%d")".zip" DESTINATION="/Users/michaelgarrison/" <------ --- 你需要这个吗?我想你不会

while read SOURCE
do
    zip -r $OUTPUT $SOURCE
done < $CONFIG

如果您想多次执行此操作,可以使用rsync

于 2013-03-25T17:26:23.173 回答
0

我想我只是回答了我自己的问题,但我不会将其删除,而是将其留在这里以供将来参考。我所做的是将每次传递的输出更改为相同的 zip 文件。

我所做的是改变:

while read SOURCE
do
    DESTINATION="/Users/michaelgarrison/"
    OUTPUT=$BKUPDATE"/Backup_"$SOURCE"_"$(date +%Y)-$(date +%m)-$(date +%d)".zip"
    (cd /Users/michaelgarrison/; zip -r $OUTPUT $SOURCE)
done < $CONFIG

至:

OUTPUT=$BKUPDATE"/Backup_"$(date +%Y)-$(date +%m)-$(date +%d)".zip"
while read SOURCE
do
    DESTINATION="/Users/michaelgarrison/"
    (cd /Users/michaelgarrison/; zip -r $OUTPUT $SOURCE)
done < $CONFIG
于 2013-03-25T17:00:51.570 回答