Bash脚本 - 压缩一个存档中的多个目录

时间:2013-03-25 16:52:39

标签: bash shell

我一段时间制作了一个脚本,它会使用zip来压缩几个不同的用户指定目录。脚本执行此操作的方式是从config.txt读取目录并单独压缩每个目录。事实恰恰相反,对于我的用途,所有这些目录都在同一个父目录中。例如,我的/Users/username/目录中将包含以下目录:

Desktop
Documents
Pictures

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

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

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

3 个答案:

答案 0 :(得分:10)

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

这将压缩名为backup.zip

的文件下的桌面,文档和图片下的所有文件

排序的诀窍是从config.txt文件中读取列表,可能是一个垂直列表或数组,并使其成为一个长字符串。

答案 1 :(得分:1)

请阅读评论和答案,他们以一种好的方式回答了您的问题!!

  • 将不变的东西放在循环之外
  

OUTPUT = “/用户/ michaelgarrison /” $ BKUPDATE “/备份_” $(日期   + “%Y-%间 - %d”) “拉链”       DESTINATION =“/ Users / michaelgarrison /”&lt; ---------你需要这个吗?我想你不

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

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

答案 2 :(得分: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