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

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

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

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

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

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

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

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

*κάτι παρόμοιο με Documents/Vol1/A/Finalfolder1_v2. Υπάρχουν Vol1-Vol6, το κάθε Volx έχει υποφάκελο Α και Β και μετά με τη σειρά τους έχουν τους τελικούς φακέλους Finalfolder που εμπεριέχουν τα 6 αρχεία που θέλουμε να συμπιέσουμε σε ένα. Ελπίζω να μην τα γράφω πολύ μπερδεμένα, είμαι σε Windows τώρα και δεν μπορώ να βάλω tree-p
**τα αρχεία είναι διαφορετικού τύπου, έχουν διαφορετική κατάληξη το καθένα
***το ακόμα πιο πολύπλοκο για μένα είναι ότι πρέπει είτε να διαβάζει κάποιο version.txt file μέσα στο subfolder (που απλά θα γράφει 1,2 ή 3, κλπ) είτε να το βάλω κάπως να παίρνει τα filename_v2 και όχι τα filename_v1

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

Κώδικας: Επιλογή όλων
$ tar zcvf files.tar.gz file1 file2 file3 file4 file5 file6


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

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

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

Δημοσίευσηαπό konnn » 12 Ιούλ 2012, 17:55

Καλησπέρα και καλώς ήρθες. Δες αρχικά το παρακάτω μήνυμα.


!

Μήνυμα ενημέρωσης προς τον/την McNulty

Σε παρακαλούμε να διαβάσεις τις οδηγίες προς νεοεισερχόμενους προσεκτικά. Είναι σημαντική η προσάρτηση της υπογραφής με τα χαρακτηριστικά του υπολογιστή σου hardware id (πχ [10ec:8168]), έτσι ώστε να δίνονται συγκεκριμένες πληροφορίες όταν πρόκειται για επίλυση ενός προβλήματός σου. Οι αλλαγές μπορούν να γίνουν από τον πίνακα ελέγχου αλλά και με το αυτόματο script που θα το βρεις παρακάτω.
Αυτόματο script υπογραφής


Εδώ είναι κάποια νήματα του φόρουμ , 1 κ 2 καθώς και ένας εξωτερικός σύνδεσμος που αναφέρει και την εντολή που προείπες.
Δεν ξέρω αν σε κάλυψα.
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

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

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

Έχω αρχίσει το διάβασμα, αλλά επειδή πιέζομαι από το χρόνο, μετά από άλλες συμβουλές έχω καταλήξει κάπως σε αυτό:

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

cd Documents/Vol1/A
find . -type d -exec basename {} \; |
while read folder
do
tar czvf /tmp/PR-2012`date +%m%d%H-XXXX-V1-XXXXXX-${folder}.tgz $folder
done


Καθώς το .tgz αρχείο πρέπει να ονομάζεται περίπου PR-2012MonthDayHour-XXXX-V1-XXXXXX-filename.tgz

αν υποθέσουμε φάκελο Documents/Vol1/A/Filename_v1/
που περιέχει π.χ.

filename_v1.gif
filename_v1.html
filename_v1.xls
filename_v1.txt
filename_v1.vsd
filename_v1.docx


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

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

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

κάπου χάνομαι...κάθε φάκελος έχει έξι αρχεία; είναι standard αυτό;
οπότε εσύ θες για κάθε φάκελο/υποφάκελο που υπάρχει πχ στον /Documents/ να βρίσκεις τα αρχεία και να συμπιέζει;
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό Qdata » 12 Ιούλ 2012, 21:16

Θέλεις να συμπιέζεις μόνο τα 6 αρχεία που υπάρχουν μέσα στο Documents/Vol1/A/Finalfolder1_v1; Επίσης θέλεις να συμπιέζεις μόνο τα αρχεία με την μεγαλύτερη έκδοση; Δηλαδή αν υπάρχουν πολλά filename_v1 και πολλά filename_v2, θέλεις να συμπιέζεις μόνο τα v2;

Μπορώ να σε βοηθήσω αν θέλεις με ένα python script. :)
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

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

Δημοσίευσηαπό pmav99 » 13 Ιούλ 2012, 00:18

Βασικά το script που θες γιατί το χρειάζεσαι? Δουλειά, εργασία στη σχολή, άλλο?

Έχεις περιορισμούς στο τι γλώσσα πρέπει να γραφεί?

Άνέβασε και τον κώδικα που έχεις γράψει.
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

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

clepto έγραψε:κάπου χάνομαι...κάθε φάκελος έχει έξι αρχεία; είναι standard αυτό;
οπότε εσύ θες για κάθε φάκελο/υποφάκελο που υπάρχει πχ στον /Documents/ να βρίσκεις τα αρχεία και να συμπιέζει;


Ακριβώς. Έξι αρχεία συν το version.txt (αν καταλήξω ότι με βολεύει περισσότερο από το να δημιουργώ filename_v2, filename_v3 etc.)

Qdata έγραψε:Θέλεις να συμπιέζεις μόνο τα 6 αρχεία που υπάρχουν μέσα στο Documents/Vol1/A/Finalfolder1_v1; Επίσης θέλεις να συμπιέζεις μόνο τα αρχεία με την μεγαλύτερη έκδοση; Δηλαδή αν υπάρχουν πολλά filename_v1 και πολλά filename_v2, θέλεις να συμπιέζεις μόνο τα v2;

Μπορώ να σε βοηθήσω αν θέλεις με ένα python script. :)


Ακριβώς. Συμπιέζω μόνο τα 6 αρχεία. Και στο τέλος θα συμπιέσω και όλα τα συμπιεσμένα σε ένα και μοναδικό .tgz πάλι (έτσι θέλουν).
Κάθε βοήθεια δεκτή :)

pmav99 έγραψε:Βασικά το script που θες γιατί το χρειάζεσαι? Δουλειά, εργασία στη σχολή, άλλο?

Έχεις περιορισμούς στο τι γλώσσα πρέπει να γραφεί?

Άνέβασε και τον κώδικα που έχεις γράψει.


Δεν έχει περιορισμούς στη γλώσσα, απλά θα βόλευε περισσότερο το script σε UNIX. Το θέμα είναι αν προλαβαίνω (ως απόλυτα αρχάριος) να το κάνω σε δύο βδομάδες (έχει και άλλα δύο βήματα, πιο δύσκολα).
Για δουλειά το θέλω, δεν ασχολούμαι με προγραμματισμό, ούτε οι άλλοι στο γραφείο, απλά είπα να ψάξω μήπως μπορώ να το κάνω αυτό γιατί θα βοηθήσει πάρα πολύ μια παράδοση που έχουμε σε δύο βδομάδες.

Μία άλλη βοήθεια που εισέπραξα είναι το παρακάτω:


Κώδικας: Επιλογή όλων
#!/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
babeTUX
babeTUX
 
Δημοσιεύσεις: 23
Εγγραφή: 12 Ιούλ 2012, 16:17
Εκτύπωση

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

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

bump

Κώδικας: Επιλογή όλων
#!/bin/sh
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`

tar zcvfp $DST_DIR/Proc_Sat-1-${DT}-S515-V${version}-OUNCL-P${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




Any ideas γιατί δεν τα ζιπάρει?

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

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

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

McNulty έγραψε:tar zcvfp $DST_DIR/Proc_Sat-1-${DT}-S515-V${version}-OUNCL-P${dirpath}-${cleanname}.tgz $f > /dev/null 2>&1

Δεν το εκτέλεσα, αλλά το "f" πρέπει να μπει αμέσως πριν το όνομα του αρχείου.
Επίσης, αφαιρούμε και το "> /dev/null 2>&1" για να μας εμφανίσει περισσότερες πληροφορίες για την λειτουργία της εντολής tar.
Αυτή η γραμμή πρέπει να γραφτεί ως:
Κώδικας: Επιλογή όλων
tar zcvpf $DST_DIR/Proc_Sat-1-${DT}-S515-V${version}-OUNCL-P${dirpath}-${cleanname}.tgz $f


Το εκτελείς και μας δίνεις το αποτέλεσμα. :)
Κύπριος; Κόπιασε στο 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 » 18 Ιούλ 2012, 20:22

Thanks!

To άλλαξα, το εκτέλεσα αλλά καμία διαφορά. Ούτε error message ούτε ζιπαρισμένα αρχεία. Έβαλα ένα echo "counter" να δω αν διαβάζει τους υποφακέλους τουλάχιστον και πράγματι μου το έβγαλε τόσες φορές όσες οι υποφάκελοι.
McNulty
babeTUX
babeTUX
 
Δημοσιεύσεις: 23
Εγγραφή: 12 Ιούλ 2012, 16:17
Εκτύπωση

Επόμενο

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