Help - simple UNIX script / gzip (beginner)

Είναι δωρεάν, είναι σταθερό, είναι γρήγορο.. ας το γνωρίσουμε και λίγο καλύτερα..

Συντονιστές: Super-Moderators, Software & Hardware Moderators

Απάντηση
McNulty
Δημοσιεύσεις: 11
Εγγραφή: 12 Ιούλ 2012 16:00

Help - simple UNIX script / gzip (beginner)

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

Καλησπέρα σε όλους!

Ζητώ τη βοήθειά σας και εκ των προτέρων ζητώ και κατανόηση μιας και είμαι εντελώς αρχάριος με UNIX/Linux και αγνοώ βασικά πράγματα (αλλά έχω διάθεση να αφιερώσω αρκετό χρόνο).

Χρειάζομαι να δημιουργήσω ένα σκριπτάκι που να σκανάρει έναν μικρό αριθμό folders & subfolders (6x2xΝ), [πιθανόν αργότερα να αποθηκεύει και κάποια data για να γίνει populate ένα XML file-δεν είμαι σε αυτό το επίπεδο ακόμα προφανώς!], και για κάθε ένα από τα παραπάνω subfolders να συμπιέζει τα 6 αρχεία* που έχει μέσα σε 1 .tgz **


*τα αρχεία είναι διαφορετικού τύπου, έχουν διαφορετική κατάληξη το καθένα
**το ακόμα πιο πολύπλοκο για μένα είναι ότι πρέπει είτε να διαβάζει κάποιο version.txt file μέσα στο subfolder (που απλά θα γράφει 1,2 ή 3, κλπ) είτε να το βάλω κάπως να παίρνει τα filename_v2 και όχι τα filename_v1

Γνωρίζω ότι πρέπει να χρησιμοποιήσω την εντολή gzip και κάτι παρόμοιο με


Κώδικας: Επιλογή όλων

$ tar zcvf files.tar.gz file1 file2 file3 file4 file5 file6

αλλά επειδή αγνοώ ακόμα και τα βασικά πρώτα βήματα καλά καλά, είπα να ζητήσω τη βοήθειά σας.
Αν δεν υπάρχει χρόνος, θα εκτιμούσα πολύ έστω την παραπομπή σε κάποια άλλα λινκ με αντίστοιχα παραδείγματα/tutorials.

Ευχαριστώ πολύ για οποιαδήποτε βοήθεια εκ των προτέρων.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Help - simple UNIX script / gzip (beginner)

Δημοσίευση από gvre » 12 Ιούλ 2012 16:34

Μπορείς να δώσεις ένα παράδειγμα δομής των φακέλων και των αρχείων που περιέχουν ( tree -p ) καθώς επίσης και των συμπιεσμένων αρχείων που θέλεις να δημιουργείς;

McNulty
Δημοσιεύσεις: 11
Εγγραφή: 12 Ιούλ 2012 16:00

Help - simple UNIX script / gzip (beginner)

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

Αυτή τη στιγμή είμαι σε υπολογιστή με Windows μόνο οπότε έτσι πρόχειρα είναι κάπως όπως στο attachment.

To ζητούμενο αρχείο απλά θα έχει τα 6 αρχεία από τον τελικό φάκελο και θα έχει μία ονομασία τύπου PR-1-2012monthdayhour-XXXX-V1-XXXX-filename.tgz

όπου V1 το μόνο που θα αλλάζει (θα το διαβάζει από το version.txt είτε από το final folder name) και το filename είναι το όνομα που έχουν και τα 6 αρχεία στον τελικό φάκελο (με άλλη κατάληξη). Ελπίζω να τα διατυπώνω σωστά.

Ευχαριστώ
Συνημμένα
example.jpg
File tree
example.jpg (17.55 KiB) Προβλήθηκε 15025 φορές

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Help - simple UNIX script / gzip (beginner)

Δημοσίευση από gvre » 12 Ιούλ 2012 17:29

Δηλαδή, θέλεις το script να μπαίνει σε κάθε υποφάκελο των φακέλων Vol, να διαβάζει το version.txt και στη συνέχεια να συμπιέζει τα περιεχόμενά του; Δηλαδή, στο παράδειγμα της εικόνας που έστειλες, θα δημιουργηθούν τα αρχεία PR-1-2012monthdayhour-V1-Dlv.tgz και PR-1-2012monthdayhour-V1-Drv.tgz;

McNulty
Δημοσιεύσεις: 11
Εγγραφή: 12 Ιούλ 2012 16:00

Help - simple UNIX script / gzip (beginner)

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

Ακριβώς.

Ένα άλλο θέμα είναι η επιλογή version. Ίσως αντί να διαβάζει το version.txt να κοιτάει το filename και να επιλέγει το filename_v2 όπου υπάρχει αντί του v1.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Help - simple UNIX script / gzip (beginner)

Δημοσίευση από gvre » 13 Ιούλ 2012 10:44

Αύριο που θα βρω λίγο χρόνο θα στείλω κάτι για να ξεκινήσεις.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Help - simple UNIX script / gzip (beginner)

Δημοσίευση από gvre » 13 Ιούλ 2012 14:20

Μπορείς να ξεκινήσεις με κάτι τέτοιο (χρειάζεται το αρχείο version.txt). Δεν το έχω ελέγξει πολύ. Ίσως θέλει καμια διόρθωση.

Κώδικας: Επιλογή όλων

#!/bin/sh
DST_DIR=/tmp/Parent/backup
SRC_DIR=/tmp/Parent/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`

                                tar zcvfp $DST_DIR/PR-1-${DT}-V${version}-${dirpath}-${cleanname}.tgz $f > /dev/null 2>&1
                                if [ $? -ne 0 ]; then
                                        echo "error in backup" # add better error handling here
                                fi
                        done
                fi
        fi
done

McNulty
Δημοσιεύσεις: 11
Εγγραφή: 12 Ιούλ 2012 16:00

Help - simple UNIX script / gzip (beginner)

Δημοσίευση από McNulty » 16 Ιούλ 2012 16:03

Σε υπερ-ευχαριστώ φίλε μου, με βοηθάς πολύ! Θα το δοκιμάσω αύριο που θα είμαι πάνω σε αυτόν τον υπολογιστή και θα ενημερώσω πάλι.

Και κάτι τελευταίο (και ευχαριστώ και πάλι για τη βοήθεια):

Όλα τα συμπιεσμένα .tgz αρχεία μετά γίνεται να τα συμπιέσω με τη σειρά τους σε ένα μόνο .tgz αρχείο, έτσι?

Μία εντολή κάπως έτσι;;

Κώδικας: Επιλογή όλων

cd working area/last
find . -type d -exec basename  {} \; |
while read folder
do
   tar czvf /tmp/FINAL-2012`date +%m%d%H-${folder}.tgz  $folder
done
ή είμαι τελείως off? (θυμίζω ότι είμαι εντελώς αρχάριος)

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Help - simple UNIX script / gzip (beginner)

Δημοσίευση από gvre » 16 Ιούλ 2012 22:07

Μπορείς με tar zcvfp final.tar.gz backup_folder να δημιουργήσεις ένα .tar.gz, το οποίο θα περιέχει όλα τα συμπιεσμένα αρχεία.
Γιατί θέλεις να κάνεις κάτι τέτοιο;

McNulty
Δημοσιεύσεις: 11
Εγγραφή: 12 Ιούλ 2012 16:00

Help - simple UNIX script / gzip (beginner)

Δημοσίευση από McNulty » 17 Ιούλ 2012 10:35

Εννοείς δηλαδή να προσθέσω αυτή τη γραμμή στο σκριπτάκι που έγραψες ή να το κάνω ξεχωριστά; (σόρρυ και πάλι, επαναλαμβάνω αρχάριος)

Την τελική συμπίεση σε ένα αρχείο μου τη ζητήσανε. Το θέλω για δουλειά, δεν έχουμε κάποια σχέση με προγραμματισμό, αλλά θα εξοικονομεί χρόνο για κάτι delivery και είπα να δοκιμάσω να βρω κάτι. Το θέμα είναι ότι ίσως είναι πιο χρήσιμο να βάλω κάποιο user prompt στην αρχή που να ρωτάει delivery date, work version κλπ, για να κερδίζουμε και άλλο χρόνο.

Σε υπερ-ευχαριστώ και πάλι, πραγματικά!

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Help - simple UNIX script / gzip (beginner)

Δημοσίευση από gvre » 17 Ιούλ 2012 10:38

Πρόσθεσέ τη στο τέλος του script, αλλάζοντας τα ονόματα με τα σωστά.

McNulty
Δημοσιεύσεις: 11
Εγγραφή: 12 Ιούλ 2012 16:00

Help - simple UNIX script / gzip (beginner)

Δημοσίευση από McNulty » 17 Ιούλ 2012 18:32

Συγγνώμη εκ των προτέρων γιατί υποψιάζομαι ότι είναι αστεία η ερώτηση (ως αρχάριος), αλλά το δοκίμασα και βγάζει command not found.

Έκανα τεστ ενα απλό έτοιμο σκριπτ να δω αν κάνω κάτι βασικό λάθος (εννοώ με chmod +x κλπ) και δούλεψε. Τι βασικό αγνοώ? Γιατί εννοώ δεν μου έβγαλε λάθος στο compiling, απλά command not found.

Thanks!

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Help - simple UNIX script / gzip (beginner)

Δημοσίευση από gvre » 18 Ιούλ 2012 09:59

Υποθέτω ότι έχεις δώσει chmod +x script.sh και για να το τρέξεις χρησιμοποιείς ./script.sh ή /path/to/script.sh, έτσι;

McNulty
Δημοσιεύσεις: 11
Εγγραφή: 12 Ιούλ 2012 16:00

Help - simple UNIX script / gzip (beginner)

Δημοσίευση από McNulty » 18 Ιούλ 2012 15:58

Δοκιμάζω τώρα στο λαπτοπ μου που έχει ubuntu. Το έκανα εκτελέσιμο, αλλά μου βγάζει

Κώδικας: Επιλογή όλων

cd: 23: can't cd to home/myname/Parent/Vol1/XXXX01
cd: 23: can't cd to home/myname/Parent/Vol2/version~
Είχα αλλάξει το DST_DIR & SRC_DIR σε /home/myname/Output/zipped και /home/myname/Parent/Vol*/*

Κάποια βλακεία έχω κάνει και γκουγκλάρω το έρρορ μπας και βρω άκρη.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Help - simple UNIX script / gzip (beginner)

Δημοσίευση από gvre » 18 Ιούλ 2012 16:09

Βεβαιώσου ότι έχεις γράψει σωστά τα paths (πρέπει να ξεκινάνε με /) και ότι ο χρήστης που τρέχει το script έχει δικαιώματα (rx) στους καταλόγους που θέλεις να πάρεις backup.

Απάντηση

Επιστροφή στο “Linux Guide”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες