2011-01-21 43 views
0

我刚刚放在一起下面显示的bash脚本,以便从集文件夹中进行连续备份。Bash脚本:焦油不能正常工作

然而,似乎find调用似乎不仅包括备份中的/home/myfoldertobackup/,而且还包括检查文件时间的tar。为什么地球上是这样的,我能做些什么才能确保前面提到的文件夹只被放入焦油中?

if [ -e $filename ]; 
then 
    # Tar exist. Check if tar is older than five days and if so, update it. 
    find $filename -mtime +5 -exec tar -czvf $filename /home/myfoldertobackup/ {} \; 
else 
    #Tar doesn't exist. Force creation of tar! 
    tar -czvPf $filename /home/myfoldertobackup/ 
fi 
+3

请注意,您的备份策略确保如果新备份因任何原因失败,y我们之前的备份已经被破坏 - 所以你比以前更糟糕。在知道新的备份完成之前,不要销毁旧的备份。 – 2011-01-21 15:33:37

+0

嗨乔纳森。绝对好点!你会说,将焦油放在临时位置,然后将它们移动到备份目标位置会更合适吗? – Industrial 2011-01-21 16:55:59

回答

3

如果“$文件名”最后的修改时间超过5天的,找到运行以下命令:

tar -cvfz $filename /home/myfoldertobackups/ $filename 

这使/家/ myfoldertobackup $文件名(可能已被截断,因为焦油是要写在它上面)$ filename;如果你不想$文件名只写

find $filename -mtime +5 -exec tar -cvz /home/myfoldertobackups -f {} \; 

或更好(因为更具可读性)

if [ -n "$(find $filename -mtime +5)" ]; then 
    tar -cvzf "$filename" /home/myfoldertobackups; 
fi 

UPDATE

这里是你的代码我建议的变更:

if [ -e $filename ]; 
then 
    # Tar exist. Check if tar is older than five days and if so, update it. 
    # find $filename -mtime +5 -exec tar -czvf $filename /home/myfoldertobackup/ {} \; 
    if [ -n "$(find $filename -mtime +5)" ]; then 
     tar -cvzf "$filename" /home/myfoldertobackups; 
    fi 
else 
    #Tar doesn't exist. Force creation of tar! 
    tar -czvPf $filename /home/myfoldertobackup/ 
fi 
2

是因为find为它找到的文件的名称替换{}。 只需放下{}即可完成。