Help - simple UNIX script / gzip (beginner)  Το θέμα επιλύθηκε

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Help - simple UNIX script / gzip (beginner)

Δημοσίευσηαπό medigeek » 18 Ιούλ 2012, 22:06

Ίσως θέλει bash αντί sh. Εκανα ακόμη μερικές αλλαγές, οπόταν δοκίμασε αυτό:
Θυμήσου να αλλάξεις το "myname" στο /home/myname/Output/zipped και στο /home/myname/Input/Vol*/*

Κώδικας: Επιλογή όλων
#!/bin/bash
DST_DIR=/home/myname/Output/zipped
SRC_DIR=/home/myname/Input/Vol*/*
VERSION_FILE=version.txt
DT=`date +%Y%m%d%H`

for d in $SRC_DIR; do
cd $d
if [ -e $VERSION_FILE ]; then
version=`cat $VERSION_FILE`
if [ "$version" != "" ]; then
for f in `find . -path "*_v${version}"`; do
dirpath=`echo $d | rev | cut -d / -f1,2 | rev | sed 's/\//-/'`
cleanname=`echo $f | cut -d / -f 2 | cut -d _ -f 1`
echo "Will execute: tar czvpf $DST_DIR/Proc_Sat-1-${DT}-S515-V${version}-OUNCL-P${dirpath}-${cleanname}.tgz $f"
echo "Checking if files/folders exist - ls output"
ls -ld $f
tar czvpf $DST_DIR/Proc_Sat-1-${DT}-S515-V${version}-OUNCL-P${dirpath}-${cleanname}.tgz $f
echo "Checking if tgz file was created - ls output"
ls -ld $DST_DIR/Proc_Sat-1-${DT}-S515-V${version}-OUNCL-P${dirpath}-${cleanname}.tgz
if [ $? -ne 0 ]; then
echo "error in backup" # add better error handling here
fi
done
fi
fi
done


Δώσε το αποτέλεσμα της εκτέλεσης του script από το τερματικό -- το λεκτικό/περιγραφικό αποτέλεσμα "Δεν δουλεύει" δεν με βοηθάει να βρω το πρόβλημα δυστυχώς.
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Help - simple UNIX script / gzip (beginner)

Δημοσίευσηαπό McNulty » 19 Ιούλ 2012, 12:12

Ναι με συγχωρείς δεν το διατύπωσα σωστά, δεν βγάζει κανένα μήνυμα απολύτως στο τερματικό. Μόνο όταν έβαλα ένα echo "test" στην προτελευταία γραμμή, έγραψε test τόσες φορές όσες είναι οι υποφάκελοι.

Έτρεξα το δικό σου και πάλι δεν βγάζει κάποιο μήνυμα, ούτε καν τα "checking if files/folders exist" που έβαλες.

Ορίστε το tree -p αν βοηθάει:

Κώδικας: Επιλογή όλων
── [drwxr-xr-x] Desktop
├── [drwxr-xr-x] Documents
├── [drwxr-xr-x] Downloads
├── [drwxrwxrwx] Parent
│ ├── [drwxrwxrwx] Vol1
│ │ ├── [drwxr-xr-x] D009
│ │ │ ├── [-rw-r--r--] D009.gif
│ │ │ ├── [-rw-r--r--] D009.html
│ │ │ ├── [-rw-r--r--] D009.mdb
│ │ │ ├── [-rw-r--r--] D009.mpp
│ │ │ ├── [-rw-r--r--] D009.vsd
│ │ │ ├── [-rw-r--r--] D009.xls
│ │ │ └── [-rw-r--r--] version
│ │ ├── [drwxr-xr-x] D010
│ │ │ ├── [-rw-r--r--] D010.gif
│ │ │ ├── [-rw-r--r--] D010.html
│ │ │ ├── [-rw-r--r--] D010.mdb
│ │ │ ├── [-rw-r--r--] D010.mpp
│ │ │ ├── [-rw-r--r--] D010.vsd
│ │ │ ├── [-rw-r--r--] D010.xls
│ │ │ └── [-rw-r--r--] version
│ │ ├── [drwxr-xr-x] S060
│ │ │ ├── [-rw-r--r--] S060.gif
│ │ │ ├── [-rw-r--r--] S060.html
│ │ │ ├── [-rw-r--r--] S060.mdb
│ │ │ ├── [-rw-r--r--] S060.mpp
│ │ │ ├── [-rw-r--r--] S060.vsd
│ │ │ ├── [-rw-r--r--] S060.xls
│ │ │ └── [-rw-r--r--] version
│ │ └── [drwxr-xr-x] T020
│ │ ├── [-r--r--r--] T020.gif
│ │ ├── [-r--r--r--] T020.html
│ │ ├── [-r--r--r--] T020.mdb
│ │ ├── [-r--r--r--] T020.mpp
│ │ ├── [-r--r--r--] T020.vsd
│ │ ├── [-r--r--r--] T020.xls
│ │ └── [-rw-r--r--] version
│ ├── [drwxr-xr-x] Vol2
│ │ └── [drwxr-xr-x] D022
│ │ ├── [-rw-r--r--] D022.gif
│ │ ├── [-rw-r--r--] D022.html
│ │ ├── [-rw-r--r--] D022.mdb
│ │ ├── [-rw-r--r--] D022.mpp
│ │ ├── [-rw-r--r--] D022.vsd
│ │ ├── [-rw-r--r--] D022.xls
│ │ └── [-rw-r--r--] version
│ ├── [drwxr-xr-x] Vol3
│ │ ├── [drwxr-xr-x] D019
│ │ │ ├── [-rw-r--r--] D019.gif
│ │ │ ├── [-rw-r--r--] D019.html
│ │ │ ├── [-rw-r--r--] D019.mdb
│ │ │ ├── [-rw-r--r--] D019.mpp
│ │ │ ├── [-rw-r--r--] D019.vsd
│ │ │ ├── [-rw-r--r--] D019.xls
│ │ │ └── [-rw-r--r--] version
│ │ └── [drwxr-xr-x] T010
│ │ ├── [-r--r--r--] T010.gif
│ │ ├── [-r--r--r--] T010.html
│ │ ├── [-r--r--r--] T010.mdb
│ │ ├── [-r--r--r--] T010.mpp
│ │ ├── [-r--r--r--] T010.vsd
│ │ ├── [-r--r--r--] T010.xls
│ │ └── [-rw-r--r--] version
│ └── [drwxr-xr-x] Vol4
│ ├── [drwxr-xr-x] P102
│ │ ├── [-rw-r--r--] P102.gif
│ │ ├── [-rw-r--r--] P102.html
│ │ ├── [-rw-r--r--] P102.mdb
│ │ ├── [-rw-r--r--] P102.mpp
│ │ ├── [-rw-r--r--] P102.vsd
│ │ ├── [-rw-r--r--] P102.xls
│ │ └── [-rw-r--r--] version
│ └── [drwxr-xr-x] TTNC020
│ ├── [-rw-r--r--] Thumbs.db
│ ├── [-r--r--r--] T020.gif
│ ├── [-r--r--r--] T020.html
│ ├── [-r--r--r--] T020.mdb
│ ├── [-r--r--r--] T020.mpp
│ ├── [-r--r--r--] T020.vsd
│ ├── [-r--r--r--] T020.xls
│ └── [-rw-r--r--] version
├── [-rwxrwxrwx] script
├── [-rwxrwxrwx] script1~
├── [drwxrwxrwx] Output
│ ├── [drwxr-xr-x] total
│ └── [drwxr-xr-x] zipped


Ευχαριστώ πάρα πολύ και πάλι!
McNulty
babeTUX
babeTUX
 
Δημοσιεύσεις: 23
Εγγραφή: 12 Ιούλ 2012, 16:17
Εκτύπωση

Re: Help - simple UNIX script / gzip (beginner)

Δημοσίευσηαπό medigeek » 19 Ιούλ 2012, 12:34

Πάμε ξανά:
(Το αρχείο version.txt υπάρχει;)

Κώδικας: Επιλογή όλων
#!/bin/bash
DST_DIR=/home/myname/Output/zipped
SRC_DIR=/home/myname/Input/Vol*/*
VERSION_FILE=version.txt
DT=`date +%Y%m%d%H`

echo "Checking if files/folders exist: $DST_DIR"
ls -ld $DST_DIR
echo "Checking if files/folders exist: $SRC_DIR"
ls -ld $SRC_DIR
echo "Checking if files/folders exist: $VERSION_FILE"
ls -ld $VERSION_FILE

for d in $SRC_DIR; do
cd $d
if [ -e $VERSION_FILE ]; then
version=`cat $VERSION_FILE`
if [ "$version" != "" ]; then
for f in `find . -path "*_v${version}"`; do
dirpath=`echo $d | rev | cut -d / -f1,2 | rev | sed 's/\//-/'`
cleanname=`echo $f | cut -d / -f 2 | cut -d _ -f 1`
echo "Will execute: tar czvpf $DST_DIR/Proc_Sat-1-${DT}-S515-V${version}-OUNCL-P${dirpath}-${cleanname}.tgz $f"
echo "Checking if files/folders exist - ls output"
ls -ld $f
tar czvpf $DST_DIR/Proc_Sat-1-${DT}-S515-V${version}-OUNCL-P${dirpath}-${cleanname}.tgz $f
echo "Checking if tgz file was created - ls output"
ls -ld $DST_DIR/Proc_Sat-1-${DT}-S515-V${version}-OUNCL-P${dirpath}-${cleanname}.tgz
if [ $? -ne 0 ]; then
echo "error in backup" # add better error handling here
fi
done
fi
fi
done
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Help - simple UNIX script / gzip (beginner)

Δημοσίευσηαπό medigeek » 19 Ιούλ 2012, 12:56

Για όσους θέλουν να βοηθήσουν, αυτή η εντολή δημιουργεί το tree output που έδωσες:
Κώδικας: Επιλογή όλων
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.$i; touch $dir/$z/$x/$x.$i; done; echo $dir/$z/$x/version; touch $dir/$z/$x/version; done; done


Edit: με _v1 και _v2 κατάληξη:
Κώδικας: Επιλογή όλων
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
Τελευταία επεξεργασία από medigeek και 19 Ιούλ 2012, 13:17, έχει επεξεργασθεί 1 φορά/ες συνολικά
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Help - simple UNIX script / gzip (beginner)

Δημοσίευσηαπό McNulty » 19 Ιούλ 2012, 12:58

Κώδικας: Επιλογή όλων
Checking if files/folders exist: /home/myname/Output/zipped
drwxr-xr-x 2 myname myname 4096 2012-07-18 12:40 /home/myname/Output/zipped
Checking if files/folders exist: /home/myname/Input/Vol*/*
drwxr-xr-x 2 myname myname 4096 2012-07-18 12:40 /home/myname/Input/Vol1/D009
drwxr-xr-x 2 myname myname 4096 2012-07-18 12:40 /home/myname/Input/Vol1/D010
drwxr-xr-x 2 myname myname 4096 2012-07-18 12:40 /home/myname/Input/Vol1/S060
drwxr-xr-x 2 myname myname 4096 2012-07-18 12:40 /home/myname/Input/Vol1/T020
drwxr-xr-x 2 myname myname 4096 2012-07-18 12:40 /home/myname/Input/Vol2/D022
drwxr-xr-x 2 myname myname 4096 2012-07-18 12:39 /home/myname/Input/Vol3/D019
drwxr-xr-x 2 myname myname 4096 2012-07-18 12:39 /home/myname/Input/Vol3/T010
drwxr-xr-x 2 myname myname 4096 2012-07-18 12:39 /home/myname/Input/Vol4/P102
drwxr-xr-x 2 myname myname 4096 2012-07-18 12:39 /home/myname/Input/Vol4/T020
Checking if files/folders exist: version.txt
ls: cannot access version.txt: No such file or directory


Οπότε υπάρχει κάποιο πρόβλημα με το version. Αν δεις πιο πάνω στο tree -p υπάρχει.
Γενικά απλά είναι ένα αρχείο text με μόνο περιεχόμενο τον αριθμό "1", "2", "3", κ.ο.κ.
Αλλά υπάρχει ελευθερία να το κάνω ό,τι θέλω, ακόμα και να το σβήσω αν υπάρχει καλύτερος τρόπος να αναγνωρίζει version.
McNulty
babeTUX
babeTUX
 
Δημοσιεύσεις: 23
Εγγραφή: 12 Ιούλ 2012, 16:17
Εκτύπωση

Re: Help - simple UNIX script / gzip (beginner)

Δημοσίευσηαπό medigeek » 19 Ιούλ 2012, 13:08

1. Δεν υπάρχει "version.txt", υπάρχει "version"
2. Δεν υπάρχουν αρχεία με κατάληξη "_v$version" στο tree που έδωσες, ενώ το script ελέγχει για αρχεία π.χ. myfile_v2
έγραψε:for f in `find . -path "*_v${version}"`; do
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Help - simple UNIX script / gzip (beginner)

Δημοσίευσηαπό McNulty » 19 Ιούλ 2012, 13:25

Σωστός. Έβαλα σωστά αρχεία version.txt σε κάθε υποφάκελο αλλά δεν τα βρίσκει στο τσεκ που έβαλες (No such file or directory). Το βρίσκει αν τοποθετήσω ένα version.txt στο /home/myname μόνο.

Άλλαξα το όνομα των αρχείων σε ένα υποφάκελο ως name_v2 αλλά δεν ζίπαραν πάλι και δεν βγήκε κάποιο μήνυμα. Μήπως θα ήταν πιο πρακτικό να είναι το όνομα του φακέλου π.χ. _v2 ή να το παραλείψουμε τελείως και να διαβάζει μόνο το version.txt? Ό,τι νομίζεις θα είναι πιο εύκολο, δικές μου βλακείες που μας μπλέξανε είναι αυτές :Ρ, η μέθοδος μπορεί να αλλάξει.


Ευχαριστώ και πάλι
McNulty
babeTUX
babeTUX
 
Δημοσιεύσεις: 23
Εγγραφή: 12 Ιούλ 2012, 16:17
Εκτύπωση

Re: Help - simple UNIX script / gzip (beginner)

Δημοσίευσηαπό 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 φορά/ες συνολικά
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Help - simple UNIX script / gzip (beginner)

Δημοσίευσηαπό McNulty » 19 Ιούλ 2012, 15:08

wow... Σε ευχαριστώ πάρα πολύ για το χρόνο που αφιέρωσες. Και ελπίζω να μπορείς να με υποστείς μία τελευταία φορά:

Κώδικας: Επιλογή όλων
./script: line 1: $'\r': command not found
./script: line 2: $'\r': command not found
./script: line 8: $'\r': command not found
./script: line 9: $'\r': command not found
./script: line 12: $'\r': command not found
./script: line 17: $'\r': command not found
./script: line 20: $'\r': command not found
*** Checking if files/folders exist: /home/myname/Output/zipped
drwxr-xr-x 2 nls nls 4096 2012-07-19 13:41 /home/myname/Output/zipped??
*** Checking if files/folders exist: /home/myname/Parent/Vol*/*
: No such file or directory/home/myname/Parent/Vol*/*
./script: line 25: $'\r': command not found
./script: line 27: syntax error near unexpected token `$'do\r''
'/script: line 27: ` for ver in `find $SRC_DIR -type f -name "$VERSION_FILE"`; do



Τι βλακεία έχω κάνει με τα file paths? Άλλαξα το Desktop/testme αρχικά σε home/myname και μετά απλά το έσβησα. Το τέσταρα και σε άλλους φακέλους με το mkdir που έβαλες και το ίδιο. Σόρρυ για το πρήξιμο.


εδιτ τώρα είδα τις διορθώσεις.
McNulty
babeTUX
babeTUX
 
Δημοσιεύσεις: 23
Εγγραφή: 12 Ιούλ 2012, 16:17
Εκτύπωση

Re: Help - simple UNIX script / gzip (beginner)

Δημοσίευσηαπό medigeek » 19 Ιούλ 2012, 15:18

McNulty έγραψε:
./script: line 17: $'\r': command not found
./script: line 20: $'\r': command not found

1. Υποθέτω πως χρησιμοποιείς windows και notepad και εκτελείς το αρχείο μεσω cygwin; :)
Αν χρησιμοποιείς windows, δημιουργησε το αρχείο του script με το notepad++: http://notepad-plus-plus.org/
2. Ελπίζω να μην χρησιμοποιείς το "Επιλογή όλων" δίπλα από τον κώδικα.
Ορίστε ο κώδικας εδώ για πιο εύκολο copy-paste: http://pastebin.com/r5gyHJ3p -- http://pastebin.com/raw.php?i=r5gyHJ3p
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι