από medigeek » 19 Ιούλ 2012, 14:27
Το διορθωσα. Το tree που δοκίμασα:
(Το αρχείο Parent/Vol3/D009/version περιέχει τον αριθμό "1")
- Κώδικας: Επιλογή όλων
Parent/Vol1/D009
Parent/Vol1/D009/D009_v1.xls
Parent/Vol1/D009/D009_v2.xls
Parent/Vol1/D009/D009_v1.gif
Parent/Vol1/D009/D009_v2.gif
Parent/Vol1/D009/D009_v1.vsd
Parent/Vol1/D009/D009_v2.vsd
Parent/Vol1/D009/D009_v1.mpp
Parent/Vol1/D009/D009_v2.mpp
Parent/Vol1/D009/D009_v1.mdb
Parent/Vol1/D009/D009_v2.mdb
Parent/Vol1/D009/D009_v1.html
Parent/Vol1/D009/D009_v2.html
Parent/Vol1/D009/version
Parent/Vol1/D010
Parent/Vol1/D010/D010_v1.xls
Parent/Vol1/D010/D010_v2.xls
Parent/Vol1/D010/D010_v1.gif
Parent/Vol1/D010/D010_v2.gif
Parent/Vol1/D010/D010_v1.vsd
Parent/Vol1/D010/D010_v2.vsd
Parent/Vol1/D010/D010_v1.mpp
Parent/Vol1/D010/D010_v2.mpp
Parent/Vol1/D010/D010_v1.mdb
Parent/Vol1/D010/D010_v2.mdb
Parent/Vol1/D010/D010_v1.html
Parent/Vol1/D010/D010_v2.html
Parent/Vol1/D010/version
Parent/Vol1/S060
Parent/Vol1/S060/S060_v1.xls
Parent/Vol1/S060/S060_v2.xls
Parent/Vol1/S060/S060_v1.gif
Parent/Vol1/S060/S060_v2.gif
Parent/Vol1/S060/S060_v1.vsd
Parent/Vol1/S060/S060_v2.vsd
Parent/Vol1/S060/S060_v1.mpp
Parent/Vol1/S060/S060_v2.mpp
Parent/Vol1/S060/S060_v1.mdb
Parent/Vol1/S060/S060_v2.mdb
Parent/Vol1/S060/S060_v1.html
Parent/Vol1/S060/S060_v2.html
Parent/Vol1/S060/version
Parent/Vol1/T020
Parent/Vol1/T020/T020_v1.xls
Parent/Vol1/T020/T020_v2.xls
Parent/Vol1/T020/T020_v1.gif
Parent/Vol1/T020/T020_v2.gif
Parent/Vol1/T020/T020_v1.vsd
Parent/Vol1/T020/T020_v2.vsd
Parent/Vol1/T020/T020_v1.mpp
Parent/Vol1/T020/T020_v2.mpp
Parent/Vol1/T020/T020_v1.mdb
Parent/Vol1/T020/T020_v2.mdb
Parent/Vol1/T020/T020_v1.html
Parent/Vol1/T020/T020_v2.html
Parent/Vol1/T020/version
Parent/Vol2/D009
Parent/Vol2/D009/D009_v1.xls
Parent/Vol2/D009/D009_v2.xls
Parent/Vol2/D009/D009_v1.gif
Parent/Vol2/D009/D009_v2.gif
Parent/Vol2/D009/D009_v1.vsd
Parent/Vol2/D009/D009_v2.vsd
Parent/Vol2/D009/D009_v1.mpp
Parent/Vol2/D009/D009_v2.mpp
Parent/Vol2/D009/D009_v1.mdb
Parent/Vol2/D009/D009_v2.mdb
Parent/Vol2/D009/D009_v1.html
Parent/Vol2/D009/D009_v2.html
Parent/Vol2/D009/version
Parent/Vol2/D010
Parent/Vol2/D010/D010_v1.xls
Parent/Vol2/D010/D010_v2.xls
Parent/Vol2/D010/D010_v1.gif
Parent/Vol2/D010/D010_v2.gif
Parent/Vol2/D010/D010_v1.vsd
Parent/Vol2/D010/D010_v2.vsd
Parent/Vol2/D010/D010_v1.mpp
Parent/Vol2/D010/D010_v2.mpp
Parent/Vol2/D010/D010_v1.mdb
Parent/Vol2/D010/D010_v2.mdb
Parent/Vol2/D010/D010_v1.html
Parent/Vol2/D010/D010_v2.html
Parent/Vol2/D010/version
(κτλ.)
Edit: Κάνω μερικές διορθώσεις.
http://pastebin.com/UdSvmUuD
-
Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#!/bin/bash
# Purpose:
# * Find version file ("version").
# * Backup files in same directory.
# * Create or update tar.gz archive based on version file.
# Copyright (C) 2012 Savvas Radevic <vicedar@gmail.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# TEST CASE -- This command will create the required tree output of folder/files
# dir=Parent; mkdir -p $dir; for z in {Vol1,Vol2,Vol3}; do for x in {D009,D010,S060,T020}; do echo $dir/$z/$x; mkdir -p $dir/$z/$x; for i in {xls,gif,vsd,mpp,mdb,html}; do echo $dir/$z/$x/${x}_v1.$i; echo $dir/$z/$x/${x}_v2.$i; touch $dir/$z/$x/${x}_v1.$i; touch $dir/$z/$x/${x}_v2.$i; done; echo $dir/$z/$x/version; echo 1 > $dir/$z/$x/version; done; done
DST_DIR=~/Desktop/testme/Output/zipped
SRC_DIR=~/Desktop/testme/Parent/Vol*/*
VERSION_FILE=version
DT=`date +%Y%m%d%H`
#Create DST_DIR
mkdir -p $DST_DIR
echo "*** Checking if files/folders exist: $DST_DIR"
ls -ld $DST_DIR
echo "*** Checking if files/folders exist: $SRC_DIR"
ls -ld $SRC_DIR
#Search directory $d for files (-type f) that match (-name) "$VERSION_FILE"
for ver in `find $SRC_DIR -type f -name "$VERSION_FILE"`; do
#ver is file path of "version"
echo -e "\n\n\n=== Processing version file ==="
echo "*** Version file: $ver"
#dirname is directory path of file "version"
dirname=`dirname $ver`
echo "*** dirname: $dirname"
#Read first character only from $ver file
version=`head --bytes=1 $ver`
echo "*** version: $version"
#Search directory dirname for files (-type f) that match (-name) "*_v${version}*"
for f in `find $dirname -type f -name "*_v${version}*"`; do
#dirpathname and cleanname are used for file naming the tgz file
dirpathname=`echo $dirname | rev | cut -d / -f1,2 | rev | sed 's/\//-/'`
echo "*** dirpathname: $dirpathname"
cleanname=`echo $f | cut -d / -f 2 | cut -d _ -f 1`
echo "*** cleanname: $cleanname"
echo "*** Checking if files/folders exist"
ls -ld $f
backupfilepath="$DST_DIR/Proc_Sat-1-${DT}-S515-V${version}-OUNCL-P${dirpathname}-${cleanname}.tar.gz"
echo "*** backup file path: $backupfilepath"
# If backup file exists, append new files
if [ -e $backupfilepath ]; then
# u = update, z = gzip, v=verbose, f=filename
# Note: tar --update does not allow to update gzipped files,
# we unzip and rezip them.
echo "*** backup file exists"
# backupfiletar is .tar file path (stripped .gz from backupfilepath)
backupfiletar="`echo -n $backupfilepath | head --bytes -3`"
echo "*** backupfiletar: $backupfiletar"
echo "*** decompressing"
gunzip -vfd $backupfilepath
if [ ! -f ${backupfiletar} ]; then
echo "*** Error during backup"
exit 1
fi
echo "*** updating"
tar uvpf ${backupfiletar} $f
if [ $? -ne 0 ]; then
echo "*** Error during backup"
exit 1
fi
echo "*** recompressing"
gzip -vf9 ${backupfiletar}
if [ ! -f ${backupfilepath} ]; then
echo "*** Error during backup"
exit 1
fi
else
echo "*** backup file doesn't exist, creating a new backup file"
# c = create
tar czvpf $backupfilepath $f
if [ $? -ne 0 ]; then
echo "*** Error during backup"
exit 1
fi
fi
echo "*** Checking if backup file was created"
ls -ld $backupfilepath
echo -e "*** Done\n"
done
done
Output:
- Κώδικας: Επιλογή όλων
=== Processing version file ===
*** Version file: /home/savvas/Desktop/testme/Parent/Vol3/T020/version
*** dirname: /home/savvas/Desktop/testme/Parent/Vol3/T020
*** version: 1
*** dirpathname: Vol3-T020
*** cleanname: home
*** Checking if files/folders exist
-rw-rw-r-- 1 savvas savvas 0 Jul 19 13:26 /home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.vsd
*** backup file path: /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** backup file doesn't exist, creating a new backup file
tar: Removing leading `/' from member names
/home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.vsd
*** Checking if backup file was created
-rw-rw-r-- 1 savvas savvas 156 Jul 19 13:55 /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** Done
*** dirpathname: Vol3-T020
*** cleanname: home
*** Checking if files/folders exist
-rw-rw-r-- 1 savvas savvas 0 Jul 19 13:26 /home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.mdb
*** backup file path: /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** backup file exists
*** backupfiletar: /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar
*** decompressing
/home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz: 98.7% -- replaced with /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar
*** updating
tar: Removing leading `/' from member names
/home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.mdb
*** recompressing
/home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar: 98.6% -- replaced with /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** Checking if backup file was created
-rw-rw-r-- 1 savvas savvas 224 Jul 19 13:55 /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** Done
*** dirpathname: Vol3-T020
*** cleanname: home
*** Checking if files/folders exist
-rw-rw-r-- 1 savvas savvas 0 Jul 19 13:26 /home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.gif
*** backup file path: /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** backup file exists
*** backupfiletar: /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar
*** decompressing
/home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz: 98.6% -- replaced with /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar
*** updating
tar: Removing leading `/' from member names
/home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.gif
*** recompressing
/home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar: 98.5% -- replaced with /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** Checking if backup file was created
-rw-rw-r-- 1 savvas savvas 234 Jul 19 13:55 /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** Done
*** dirpathname: Vol3-T020
*** cleanname: home
*** Checking if files/folders exist
-rw-rw-r-- 1 savvas savvas 0 Jul 19 13:26 /home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.html
*** backup file path: /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** backup file exists
*** backupfiletar: /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar
*** decompressing
/home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz: 98.5% -- replaced with /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar
*** updating
tar: Removing leading `/' from member names
/home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.html
*** recompressing
/home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar: 98.4% -- replaced with /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** Checking if backup file was created
-rw-rw-r-- 1 savvas savvas 246 Jul 19 13:55 /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** Done
*** dirpathname: Vol3-T020
*** cleanname: home
*** Checking if files/folders exist
-rw-rw-r-- 1 savvas savvas 0 Jul 19 13:26 /home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.mpp
*** backup file path: /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** backup file exists
*** backupfiletar: /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar
*** decompressing
/home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz: 98.4% -- replaced with /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar
*** updating
tar: Removing leading `/' from member names
/home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.mpp
*** recompressing
/home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar: 98.3% -- replaced with /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** Checking if backup file was created
-rw-rw-r-- 1 savvas savvas 253 Jul 19 13:55 /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** Done
*** dirpathname: Vol3-T020
*** cleanname: home
*** Checking if files/folders exist
-rw-rw-r-- 1 savvas savvas 0 Jul 19 13:26 /home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.xls
*** backup file path: /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** backup file exists
*** backupfiletar: /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar
*** decompressing
/home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz: 98.3% -- replaced with /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar
*** updating
tar: Removing leading `/' from member names
/home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.xls
*** recompressing
/home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar: 98.3% -- replaced with /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** Checking if backup file was created
-rw-rw-r-- 1 savvas savvas 261 Jul 19 13:55 /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
*** Done
Το script δημιουργεί .tar.gz αντί .tgz:
- Κώδικας: Επιλογή όλων
$ ls -R Output/
Output/:
zipped
Output/zipped:
Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol1-D009-home.tar.gz
Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol1-D010-home.tar.gz
Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol1-S060-home.tar.gz
Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol1-T020-home.tar.gz
Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol2-D009-home.tar.gz
Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol2-D010-home.tar.gz
Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol2-S060-home.tar.gz
Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol2-T020-home.tar.gz
Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-D009-home.tar.gz
Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-D010-home.tar.gz
Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-S060-home.tar.gz
Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
- Κώδικας: Επιλογή όλων
$ tar -tf /home/savvas/Desktop/testme/Output/zipped/Proc_Sat-1-2012071913-S515-V1-OUNCL-PVol3-T020-home.tar.gz
home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.vsd
home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.mdb
home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.gif
home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.html
home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.mpp
home/savvas/Desktop/testme/Parent/Vol3/T020/T020_v1.xls
[ Υποθέτω πως θα χρειαστεί να αλλάξεις τα $cleanname και $dirpathname ]
Από εδώ και πέρα συνεχίζεις εσύ ή κάποιος άλλος.

Τελευταία επεξεργασία από
medigeek και 19 Ιούλ 2012, 15:19, έχει επεξεργασθεί 1 φορά/ες συνολικά