2014-03-25 97 views
-1

我是shell脚本中的新手,请问如何编写备份脚本。我在目标目录中有以下格式的数据。shell中的备份脚本

StoreID_date_time.zip

像:

-rw------- 1 rupesh ldapusers 8267310 Mar 22 12:00 44_22032014_115629.zip 

-rw------- 1 rupesh ldapusers 8269938 Mar 22 12:07 44_22032014_120013.zip 

-rw------- 1 rupesh ldapusers 8267110 Mar 22 12:14 44_22032014_120704.zip 

-rw------- 1 rupesh ldapusers 8254223 Mar 22 14:25 45_22032014_142155.zip 

-rw------- 1 rupesh ldapusers 7871060 Mar 22 12:11 48_22032014_120813.zip 

-rw------- 1 rupesh ldapusers 8314418 Mar 22 12:22 48_22032014_121038.zip 

-rw------- 1 rupesh ldapusers 8254699 Mar 24 12:13 49_22032014_145338.zip 

现在我想用下面的方式备份文件:

备份目录:/backup/date/storeid/zip文件店

,如:

/backup/22032014/44/44_22032014_115629.zip,44_22032014_120013.zip...so on 

/backup/22032014/45/45_22032014_142155.zip 

/backup/22032014/48/48_22032014_120813.zip,48_22032014_121038.zip 

/backup/22032014/49/49_22032014_145338.zip 

次日/backup/23032014/respective_storeIDfolder&files

请给一些提示或代码示例这样我就可以移动前言。

回答

1

我已经编码在最低限度的步骤没有做一个真正的检查,但验证了它。它适用于我在我的包装盒上创建的一些虚拟文件:)

#!/bin/bash 


for i in $(find * -type f -iname '*.zip') 
do 
    echo "Zip file : "$i 
    store_id=$(echo $i | cut -d "_" -f 1 ); 
    timestamp=$(echo $i | cut -d "_" -f 2 ); 
    echo Store id = ${store_id} 
    # I am assuming all these directories here will be of teh same pattern name. Else put a numeric check down. 
    mkdir -p /backup/${timestamp}/${store_id} 
    cp -f $i /backup/${timestamp}/${store_id}/ 
done; 
+0

非常感谢您 – Rups

+0

MY Pleasure。让我们知道它是否有效! –

+0

它完美的工作。谢谢。我做了一些更改,现在备份路径变为/ backup/store_id/timestamp。现在我希望每个store_id仅包含最近的三个日期文件,如:/ backup/44/21032014,22032014,23032014,如果24032014来了,请删除21032014 so.on – Rups