Δημιουργία φακέλου με μικρογραφίες σε ενα φάκελο με είκονες. Make-Thumbnails

troikas | Πέμ, 07/29/2010 - 18:52 | 3' | 28

Το script δημιουργεί έναν φάκελο με μικρογραφίες μέσα στο φάκελο με της εικόνες, που το τρεχεται.
Για να λειτουργηση θα πρέπει να εχεται εγκατεστημένα το ImageMagik και το Zenity.
Σας ρωτάει για το όνομα του φακέλου που θα περιέχει της μικρογραφίες, και το πλάτος που θα έχει η κάθε μικρογραφία -μονό το πλάτος για να είναι σταθερές η αναλογίες. Το έβαλα και στο φάκελο με τα script του Ναυτίλου, οπότε με δεξί κλικ το τρεχεται σε οποίο φάκελο θέλετε, αν περιέχει και άλλα αρχεία εκτός από εικόνες δεν πειράζει το script διαλέγει μόνο εικόνες .jpg .gif και .png.
Θέλω την γνώμη σας γιατί ασχολουμε λίγο καιρό με την δημιουργία script και θα ήθελα να ξέρω εάν θα μπορούσε να είναι γραμμένο καλύτερα και γενικά εάν είναι χρήσιμο, για μένα παντος είναι γιατί σαν hoby μου αρέσει να φτιάχνω ιστοσελίδες.

 

#!/bin/bash
szAnswer=$(zenity --entry --text "Name of the folder?" --entry-text "thumbs"); echo $szAnswer
 
name="$szAnswer"
 
mkdir $name
 
cp ./*.jpg ./$name
cp ./*.gif ./$name
cp ./*.png ./$name
 
cd $name
 
szAnswer=$(zenity --entry --text "Width of thumbs?" --entry-text "150"); echo $szAnswer
 
with="$szAnswer"
 
mogrify -resize $with *.jpg
mogrify -resize $with *.gif
mogrify -resize $with *.png
exit

 

Ευχαριστώ εκ των πρότερον.

Δώσε αστέρια!
Σχόλια

Μάλλον εννοείς "width of thumbs" σωστά; Και στον πρώτο zenity διάλογο, μάλλον θέλεις να ρωτήσεις ποιος είναι ο φάκελος όπου θα μπουν τα thumbs σωστά; Αρα, τότε μάλλον πρέπει να ρωτάς "name of folder" ;

Παρότι για μένα δεν είναι χρήσιμο (τουλάχιστον όχι τώρα), έχω κ εγώ μούρλα με τα σκριπτάκια, οπότε το δόκιμασα κ δούλεψε μια χαρά, εύγε :)

Κ οι παρατηρήσεις μου (πάντα με τη λογική ότι θες να το μοιραστείς κ με άλλλους χρήστες το script που έφτιαξες):

1) Καλό είναι να μην παίρνεις σαν δεδομένο ότι ο χρήστης έχει τα προγράμματα που χρησιμοποιείς (zenity κ mogrify σε αυτή την περίπτωση), αλλά στην αρχή του script να τσεκάρεις αν πράγματι υπάρχουν, κ αν όχι να δίνεις ένα ενημερωτικό μήνυμα για το πρόβλημα κ τον τρόπο λύσης του.

2) Ψάξε πρώτα αν υπάρχει το zenity, κ αν υπάρχει, τα υπόλοιπα μηνύματα λάθους (ή οτιδήποτε άλλο πληροφοριακό), γράψε τα στην οθόνη με το zenity (καλύτερο από το να δείνεις μηνύματα λάθους στο τερματικό, γιατί ο χρήστης μπορεί να μην το τρέχει από τερματικό).

3) Δεν είναι ασφαλές να καλείς ένα πρόγραμμα ή εντολή, (zenity, mogrify, cp, mkdir, κλπ), χωρίς το πλήρες path του (πχ /usr/bin/zenity, ή /bin/mkdir). Αν εγώ βάλω ένα κακόβουλο πρόγραμμα σε ένα υπολογιστή κ το σώσω πχ μέσα στο ~/bin σαν zenity, τότε αν ο χρήστης τρέξει το script σου, θα καλέσει έμμεσα το κακόβουλο πρόγραμμα κ όχι το πραγματικό zenity (λόγω του ότι το bin στο home έχει προτεραιότητα σε σχέση με το /usr/bin). Αν το γράφεις σαν /usr/bin/zenity, τότε δεν υπάρχει καμία αμφιβολία για το τί θα τρέξει κ από πού.

4) Στην αρχή του script, δήλωσε τα προγράμματα που χρησιμοποιείς (με πλήρες path) σαν μεταβλητές κ από εκεί κ πέρα να τα καλείς με τις μεταβλητές τους. Αν κάποιος χρήστης τύχει να έχει τα εκτελέσιμα του άλλου, αρκεί να αλλάξει τις πρώτες γραμμές του script, κ μια φορά για το κάθε πρόγραμμα. Πχ:


#!/bin/bash

ZENITY=/usr/bin/zenity
...
...
szAnswer=$($ZENITY --entry --text "Name of the file?" --entry-text "thumbs")

5) Προσπάθησε να δώσεις έτσι τις εντολές που να εξαφανίσεις τα μηνύματα λάθους. Πχ, αν τρέξω 2 φορές το script από τον ίδιο φάκελο κ του δώσω το ίδιο όνομα υποφακέλου, η mkdir θα παραπονεθεί γιατί τις ζητάω να φτιάξει ένα φάκελο που ήδη υπάρχει. Αν απλά δώσεις "mkdir -p" αντί για σκέτο mkdir, φεύγει το πρόβλημα. Το ίδιο πχ συμβαίνει με τις εντολές cp κ mogrify αν δεν υπάρχουν gif/jpg/png αρχεία.

6) Τα σχόλια βοηθάνε τον κόσμο να καταλάβει τί κάνει το script σου, κ του εμπνέουν εμπιστοσύνη να το τρέξει κ να το αλλάξει για να το διορθώσει/φέρει στα μέτρα του.

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

Thumbs up :)

-- gnu_labis

Το Linux ΔΕΝ είναι Windows!!!

dimitris]Μάλλον εννοείς "width of thumbs" σωστά; Και στον πρώτο zenity διάλογο, μάλλον θέλεις να ρωτήσεις ποιος είναι ο φάκελος όπου θα μπουν τα thumbs σωστά; Αρα, τότε μάλλον πρέπει να ρωτάς "name of folder" ; 

Ευχαριστω το διωρθοσα. Ουτε που τα προσεξα.

Body Mind Spirit

gnu_labis]Παρότι για μένα δεν είναι χρήσιμο (τουλάχιστον όχι τώρα), έχω κ εγώ μούρλα με τα σκριπτάκια, οπότε το δόκιμασα κ δούλεψε μια χαρά, εύγε :) Κ οι παρατηρήσεις μου (πάντα με τη λογική ότι θες να το μοιραστείς κ με άλλλους χρήστες το script που έφτιαξες): 1) Καλό είναι να μην παίρνεις σαν δεδομένο ότι ο χρήστης έχει τα προγράμματα που χρησιμοποιείς (zenity κ mogrify σε αυτή την περίπτωση), αλλά στην αρχή του script να τσεκάρεις αν πράγματι υπάρχουν, κ αν όχι να δίνεις ένα ενημερωτικό μήνυμα για το πρόβλημα κ τον τρόπο λύσης του. 2) Ψάξε πρώτα αν υπάρχει το zenity, κ αν υπάρχει, τα υπόλοιπα μηνύματα λάθους (ή οτιδήποτε άλλο πληροφοριακό), γράψε τα στην οθόνη με το zenity (καλύτερο από το να δείνεις μηνύματα λάθους στο τερματικό, γιατί ο χρήστης μπορεί να μην το τρέχει από τερματικό). 3) Δεν είναι ασφαλές να καλείς ένα πρόγραμμα ή εντολή, (zenity, mogrify, cp, mkdir, κλπ), χωρίς το πλήρες path του (πχ /usr/bin/zenity, ή /bin/mkdir). Αν εγώ βάλω ένα κακόβουλο πρόγραμμα σε ένα υπολογιστή κ το σώσω πχ μέσα στο ~/bin σαν zenity, τότε αν ο χρήστης τρέξει το script σου, θα καλέσει έμμεσα το κακόβουλο πρόγραμμα κ όχι το πραγματικό zenity (λόγω του ότι το bin στο home έχει προτεραιότητα σε σχέση με το /usr/bin). Αν το γράφεις σαν /usr/bin/zenity, τότε δεν υπάρχει καμία αμφιβολία για το τί θα τρέξει κ από πού. 4) Στην αρχή του script, δήλωσε τα προγράμματα που χρησιμοποιείς (με πλήρες path) σαν μεταβλητές κ από εκεί κ πέρα να τα καλείς με τις μεταβλητές τους. Αν κάποιος χρήστης τύχει να έχει τα εκτελέσιμα του άλλου, αρκεί να αλλάξει τις πρώτες γραμμές του script, κ μια φορά για το κάθε πρόγραμμα. Πχ: #!/bin/bash ZENITY=/usr/bin/zenity ... ... szAnswer=$($ZENITY --entry --text "Name of the file?" --entry-text "thumbs") 5) Προσπάθησε να δώσεις έτσι τις εντολές που να εξαφανίσεις τα μηνύματα λάθους. Πχ, αν τρέξω 2 φορές το script από τον ίδιο φάκελο κ του δώσω το ίδιο όνομα υποφακέλου, η mkdir θα παραπονεθεί γιατί τις ζητάω να φτιάξει ένα φάκελο που ήδη υπάρχει. Αν απλά δώσεις "mkdir -p" αντί για σκέτο mkdir, φεύγει το πρόβλημα. Το ίδιο πχ συμβαίνει με τις εντολές cp κ mogrify αν δεν υπάρχουν gif/jpg/png αρχεία. 6) Τα σχόλια βοηθάνε τον κόσμο να καταλάβει τί κάνει το script σου, κ του εμπνέουν εμπιστοσύνη να το τρέξει κ να το αλλάξει για να το διορθώσει/φέρει στα μέτρα του. Αν θες παραδείγματα για αυτά πού προτείνω, ρίξε μια ματιά στο script που είχα δημοσιεύσει παλαιότερα εδώ. Δεν ισχυρίζομαι σε καμία περίπτωση ότι ήταν τέλειο (δεν ήταν), απλώς αυτά που αναφέρω εδώ μπορείς να τα βρεις κ εκεί με πρακτικές λεπτομέρειες. Thumbs up :)

-- gnu_labis

Το Linux ΔΕΝ είναι Windows!!!

Ευχαριστω για της συμβουλες θα προσπαθησω να της ακολουθησω. Το λινκ με το script μαλλον δεν ειναι σωστο με ξαναγυριζει εδω.

Body Mind Spirit

gnu_labis]Συγγνώμη, λάθος πάνω στη βιασύνη μου. Ορίστε άλλη μια φορά το link κ θα το αλλάξω κ παραπάνω.

-- gnu_labis

Το Linux ΔΕΝ είναι Windows!!!

Το βρηκα φιλε μου πιο πριν και καταλαβα πολυ καλα αυτα που ειπες παραπανω. Θα πρεπει να δηλοσω την διαδρομη και για την mkdir και για την cp?

Body Mind Spirit

Αν σε απασχολεί το ζήτημα της ασφάλειας που σου είπα, τότε ναι, κάθε έντολη ή πρόγραμμα το χρειάζεται (ακόμα κ το echo που λέει ο λόγος), δεν έχει σημασία πόσο περίπλοκη ή απλή είναι η λειτουργία της.

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

-- gnu_labis

Το Linux ΔΕΝ είναι Windows!!!

gnu_labis] 6) Τα σχόλια βοηθάνε τον κόσμο να καταλάβει τί κάνει το script σου, κ του εμπνέουν εμπιστοσύνη να το τρέξει κ να το αλλάξει για να το διορθώσει/φέρει στα μέτρα του.

-- gnu_labis

Στα Ελληνικα ανετα, με τα αγγλικα ειναι το προβλημα απο συντακτικο μηδεν.

Body Mind Spirit

Μετα της συμβουλες του gnu_labis το script εγινε ετσι:

 

#!/bin/bash
#
# Thumb: A simple tool to make thumbnails 
# This tool is a graphical fronted which uses Zenity and basic command
# line tools to make a folder with thumbnails from a photo folder.
#
# Author: TROiKAS [email protected]
 
# To begin with, set the app title and version
TITLE="Thumb"
VERSION="0.2"
 
# Set window title and window width
WINDOW_TITLE=$TITLE" (v"$VERSION")"
WINDOW_WIDTH=300
WINDOW_HEIGHT=250
 
# Paths to needed executables. Please adjust as necessary
Zenity=/usr/bin/zenity
Mkdir=/bin/mkdir
Cp=/bin/cp
Mogrify=/usr/bin/mogrify
 
# Check if Zenity can be found. If not, produce error message
# (with "xmessage", since zenity is not available) and bail out
if [ ! -e "$Zenity" ]; then
xmessage "ERROR: $Zenity not found. You must install the Zenity\ package, or provide an alternative location"
    exit
fi
 
# Check if mogrify can be found. If not, produce error message and bail out
if [ ! -e "$Mogrify" ]; then
   $ZENITY --warning --text="ERROR: $Mogrify not found. You must install the  \

 

mogrify package, or provide an alternative location"
--title="$WINDOW_TITLE" exit fi   # create a text entry dialog. szAnswer=$($Zenity --width $WINDOW_WIDTH --entry --title="$WINDOW_TITLE" --text "Name of the folder?" --entry-text "thumbs"); echo $szAnswer     # If user aborts, zenity returns nothing, and $szAnswer will be zero length, # so bail out if [ -z "$szAnswer" ] ; then exit fi   name="$szAnswer"   # create a text entry dialog. szAnswer=$($Zenity --width $WINDOW_WIDTH --entry --title="$WINDOW_TITLE" --text "Width of thumbs?" --entry-text "150"); echo $szAnswer   # If user aborts, zenity returns nothing, and $szAnswer will be zero length, # so bail out if [ -z "$szAnswer" ] ; then exit fi   # Make a folder with given name. $Mkdir -p $name   # Copy all photo file in the new folder. $Cp ./*.jpg ./$name   $Cp ./*.gif ./$name   $Cp ./*.png ./$name   # Go to the new folder cd $name   # Resize all photo files. width="$szAnswer"   $Mogrify -resize $width *.jpg $Mogrify -resize $width *.gif $Mogrify -resize $width *.png   exit

 

Δεν τελειωσε ακομη θα το δουλεψω κι'αλλο μετα της διακοπες. Εψαξα να βρω εναν τροπο να γινεται πρωτα ελεγχος εαν υπαρχουν στο φακελο gif, jpg, png φωτο και μετα να γινεται copy το ιδιο και με το resize, αλλα δεν τα καταφερα.

 

Τα λεμε σε μια βδομαδα μετα την Σαμοθρακη γεια σας. Μια βδομαδα χωρις υπολογιστη λετε να παθω στερηση? :D

Body Mind Spirit

Σαμοθράκη είναι ντροπή να πας με υπολογιστή. Πήγα μια βδομάδα για κάμπινγκ πριν 2-3 χρόνια κ δε μου έλλειψε ούτε λεπτό ο υπολογιστής. Ίσα-ίσα που -αραχτός κάτω από τα απίστευτα δέντρα, κ έχοντας κάνει τις βουτιές μου στις βάθρες - είχα αρχίσει να σκέφτομαι αν τελικά διάλεξα το σωστό επάγγελμα...

Καλά να περάσεις (αν κ μάλλον έφυγες ήδη, κ καλά έκανες :) )

-- gnu_labis

Το Linux ΔΕΝ είναι Windows!!!

Τελικα η μια βδομαδα εγινε δυο. Απιστευτη η Σαμοθρακη, δεν υπηρξε καμια αναγκη για υπολογιστη.

Τα κεφαλια μεσα ξανα.... #%$&*@$.....

Body Mind Spirit

Λοιπον το δουλεψα κι' αλλο και εγινε ετσι:

 

#!/bin/bash
#
# Thumb: A simple tool to make thumbnails 
# This tool is a graphical fronted which uses Zenity and basic command
# line tools to make a folder with thumbnails from a photo folder.
#
# Author: TROiKAS [email protected]

# To begin with, set the app title and version
TITLE="Thumb"
VERSION="0.3"

# Set window title and window width
WINDOW_TITLE=$TITLE" (v"$VERSION")"
WINDOW_WIDTH=300
WINDOW_HEIGHT=250

# Paths to needed executables. Please adjust as necessary
Zenity=/usr/bin/zenity
Mkdir=/bin/mkdir
Cp=/bin/cp
Mogrify=/usr/bin/mogrify
Find=/usr/bin/find

# Check if Zenity can be found. If not, produce error message
# (with "xmessage", since zenity is not available) and bail out
if [ ! -e "$Zenity" ]; then
xmessage "ERROR: $Zenity not found. You must install the Zenity\
package, or provide an alternative location"
    exit
fi

# Check if mogrify can be found. If not, produce error message and bail out
if [ ! -e "$Mogrify" ]; then
    $ZENITY --warning --text="ERROR: $Mogrify not found. You must install the \
mogrify package, or provide an alternative location" --title="$WINDOW_TITLE"
    exit
fi 

# create a text entry dialog.
szAnswer=$($Zenity --width $WINDOW_WIDTH --entry --title="$WINDOW_TITLE"  
--text "Name of the folder?" --entry-text "thumbs"); echo $szAnswer


    # If user aborts, zenity returns nothing, and $szAnswer will be zero length,
    # so bail out
    if [ -z "$szAnswer" ] ; then
exit
fi

# Make a folder with given name.

name="$szAnswer"

$Mkdir -p $name

# Copy all photo file in the new folder.
$Find ./ -iname '*.jpg' -exec $Cp {} ./$name \;

$Find ./ -iname '*.gif' -exec $Cp {} ./$name \;

$Find ./ -iname '*.png' -exec $Cp {} ./$name \;

# Go to the new folder
cd $name

# create a text entry dialog.
szAnswer=$($Zenity --width $WINDOW_WIDTH --entry --title="$WINDOW_TITLE" 
--text "Width of thumbs?" --entry-text "150"); echo $szAnswer

    # If user aborts, zenity returns nothing, and $szAnswer will be zero length,
    # so bail out
    if [ -z "$szAnswer" ] ; then
exit
fi

# Resize all photo files.
width="$szAnswer"

$Find ./ -iname '*.jpg' -exec $Mogrify -resize $width *.jpg \;

$Find ./ -iname '*.gif' -exec $Mogrify -resize $width *.gif \;

$Find ./ -iname '*.png' -exec $Mogrify -resize $width *.png \;

exit

 

Το μονο προβλημα εαν το τρεξω απο τερματικο ειναι αυτο το μυνημα (οχι μονο για jpg παρακατω ειναι ενα παραδειγμα):

 

 

/bin/cp: το «./thumbs/black_7.jpg» και το «./thumbs/black_7.jpg» είναι το ίδιο αρχείο
 

Εαν βρω τη φταιει νομιζω πως θα ειναι τελειο.

 

Body Mind Spirit

Υποψιάζομαι (χωρίς να είμαι σίγουρος) πως φταίει ότι η find δουλεύει "recursively", δηλαδή μπαίνει κ σε υποφακέλους, οπότε βρίσκει κ τις εικόνες που είναι στο φάκελο "thumbs", κ η εντολή cp τρέχει κ για αυτές.

Δεν είμαι σίγουρος αν αυτό θες, πάντως δώσε ένα "man find" κ τσέκαρε τις παραμέτρους mindepth κ maxdepth.

-- gnu_labis

Το Linux ΔΕΝ είναι Windows!!!

Και το τελικο script χωρις μυνηματα λαθους:

 

#!/bin/bash
#
# Thumb: A simple tool to make thumbnails 
# This tool is a graphical fronted which uses Zenity and basic command
# line tools to make a folder with thumbnails from a photo folder.
#
# Author: TROiKAS [email protected]
 
# To begin with, set the app title and version
TITLE="Thumb"
VERSION="0.4"
 
# Set window title and window width
WINDOW_TITLE=$TITLE" (v"$VERSION")"
WINDOW_WIDTH=300
WINDOW_HEIGHT=250
 
# Paths to needed executables. Please adjust as necessary
Zenity=/usr/bin/zenity
Mkdir=/bin/mkdir
Cp=/bin/cp
Mogrify=/usr/bin/mogrify
Find=/usr/bin/find
 
# Check if Zenity can be found. If not, produce error message
# (with "xmessage", since zenity is not available) and bail out
if [ ! -e "$Zenity" ]; then
xmessage "ERROR: $Zenity not found. You must install the Zenity\ package, or provide an alternative location"
    exit
fi
 
# Check if mogrify can be found. If not, produce error message and bail out
if [ ! -e "$Mogrify" ]; then

 \ mogrify package, or provide an alternative location" --title="$WINDOW_TITLE"
    exit
fi 
 
# create a text entry dialog.
szAnswer=$($Zenity --width $WINDOW_WIDTH --entry --title="$WINDOW_TITLE"  
--text "Name of the folder?" --entry-text "thumbs"); echo $szAnswer
 
 
    # If user aborts, zenity returns nothing, and $szAnswer will be zero length,
    # so bail out
    if [ -z "$szAnswer" ] ; then
exit
fi
 
# Make a folder with given name.
 
name="$szAnswer"
 
$Mkdir -p $name
 
# Copy all photo file in the new folder.

$Find ./ -maxdepth 1 -iname '*.jpg' -exec $Cp -n {} $name \;
 
$Find ./ -maxdepth 1 -iname '*.gif' -exec $Cp -n {} $name \;
 
$Find ./ -maxdepth 1 -iname '*.png' -exec $Cp -n {} $name \; 
# Go to the new folder
cd $name
 
# create a text entry dialog.
szAnswer=$($Zenity --width $WINDOW_WIDTH --entry --title="$WINDOW_TITLE" 
--text "Width of thumbs?" --entry-text "150"); echo $szAnswer
 
    # If user aborts, zenity returns nothing, and $szAnswer will be zero length,
    # so bail out
    if [ -z "$szAnswer" ] ; then
exit
fi
 
# Resize all photo files.
width="$szAnswer"
 
$Find ./ -iname '*.jpg' -exec $Mogrify -resize $width *.jpg \;

$Find ./ -iname '*.gif' -exec $Mogrify -resize $width *.gif \;

$Find ./ -iname '*.png' -exec $Mogrify -resize $width *.png \;
 
exit
 

Ευχαριστω παρα πολυ τον gnu_labis για την βοηθεια :D

 

Body Mind Spirit

 

Το script ανεβηκε και σε σερβερ, πανετοιμο, οπότε αρκεί να το αποσυμπιέσετε και με διπλό κλικ επάνω του θα τρέξει.

Επίσης έγινε μια πιο αναλυτική παρουσίαση του και ο τρόπος που το προσθέτουμε στο δεξί κλικ του Ναυτίλου (για πιο νέους χρήστες).

Θα το βρείτε:  Make Thumbnails

Yet Another Greek Linux Blog

Constantinos]

Το script ανεβηκε και σε σερβερ, πανετοιμο, οπότε αρκεί να το αποσυμπιέσετε και με διπλό κλικ επάνω του θα τρέξει.

Επίσης έγινε μια πιο αναλυτική παρουσίαση του και ο τρόπος που το προσθέτουμε στο δεξί κλικ του Ναυτίλου (για πιο νέους χρήστες).

Θα το βρείτε:  Make Thumbnails

Yet Another Greek Linux Blog

Ευχαριστώ Κωνσταντίνε, για ότι έκανες. Το script το δουλεύω κι'άλλο, θέλω να προσθέσω μια μπάρα προόδου σε περιπτώσει που ο φάκελος με της εικόνες είναι μεγάλος, να μπορείς να βλέπεις τι γίνεται.

 

Body Mind Spirit

Μέτα από αρκετό ψάξιμο και διάβασμα έγιναν μερικές αλλαγές στο σκριπτ συγκεκριμένα:
1. Όταν ο χρήστης πατηση ακύρωση σε οποιοδήποτε παράθυρο διάλογου τότε διαγράφονται και όλα τα αρχεία και οι φάκελοι που δημιούργησε το σκριπτ.
2. Προστέθηκε μια μπάρα προόδου και ένα παράθυρο που πληροφορη το χρήστη όταν ολοκληρωθούν όλες οι εργασίες.
Λοιπόν το σκριπτ έγινε έτσι:

 #!/bin/bash
#
# Make-Thumbnails: A simple tool to make thumbnails
# This tool is a graphical fronted which uses Zenity and basic command
# line tools to make a folder with thumbnails in a photo folder.
# You must have imagemagik in your system.
# Author: TROiKAS [email protected]

# To begin with, set the app title and version
TITLE="Make-Thumbnails"
VERSION="1.0"

# Set window title and window width
WINDOW_TITLE=$TITLE" (v"$VERSION")"
WINDOW_WIDTH=300
WINDOW_HEIGHT=250

# Paths to needed executables. Please adjust as necessary
Zenity=/usr/bin/zenity
Mkdir=/bin/mkdir
Cp=/bin/cp
Mogrify=/usr/bin/mogrify
Find=/usr/bin/find
Rm=/bin/rm
Killall=/usr/bin/killall

# Check if Zenity can be found. If not, produce error message
# (with "xmessage", since zenity is not available) and bail out
if [ ! -e "$Zenity" ]; then
xmessage "ERROR: $Zenity not found. You must install the Zenity\
package, or provide an alternative location"
    exit
fi

# Check if mogrify can be found. If not, produce error message and bail out
if [ ! -e "$Mogrify" ]; then
    $ZENITY --warning --text="ERROR: $Mogrify not found. You must install the \
mogrify package, or provide an alternative location" --title="$WINDOW_TITLE"
    exit
fi

# create a text entry dialog.
szAnswer=$($Zenity --width $WINDOW_WIDTH --entry --title="$WINDOW_TITLE"  --text "Name of the folder?" --entry-text "thumbs"); echo $szAnswer

    # If user aborts, zenity returns nothing, and $szAnswer will be zero length,
    # and then exit
    if [ -z "$szAnswer" ] ; then
exit
fi

# Make a folder with given name.
name="$szAnswer"

$Mkdir -p $name

# Copy all photo file in the new folder.
$Find ./ -maxdepth 1 -iname '*.jpg' -exec $Cp -n {} $name \;

$Find ./ -maxdepth 1 -iname '*.gif' -exec $Cp -n {} $name \;

$Find ./ -maxdepth 1 -iname '*.png' -exec $Cp -n {} $name \;

# Go to the new folder
cd $name

# create a text entry dialog.
szAnswer=$($Zenity --width $WINDOW_WIDTH --entry --title="$WINDOW_TITLE" --text "Width of thumbs?" --entry-text "150"); echo $szAnswer

    # If user aborts, zenity returns nothing, and $szAnswer will be zero length,
# Remove all files created by the script and then exit.
    if [ -z "$szAnswer" ] ; then
 cd ../
 $Rm -rf $name
 exit
fi

# Resize all photo files.
width="$szAnswer"

function resize() {
for i in "$name"; do
echo "$PROGRESS";
$Find ./ -iname '*.jpg' -exec $Mogrify -resize $width *.jpg \;
$Find ./ -iname '*.gif' -exec $Mogrify -resize $width *.gif \;
$Find ./ -iname '*.png' -exec $Mogrify -resize $width *.png \;
done
}
# Show a progress bar.
resize | (if `$Zenity --progress --pulsate --auto-close --width 400 --title "$WINDOW_TITLE | Wait Resize images" --text "Resize images..."`;
                 then
# Info box when resize complete.
$Zenity --info --width $WINDOW_WIDTH --title="$WINDOW_TITLE" --text="The resize is now complete."
                 else
# If user abort stop everything remove all files
# created by the script and then exit.
                     $Killall $Find
                     $Killall $Mogrify
                    cd ../
                    $Rm -rf $name
                 exit
                 fi)

exit

Το επόμενο βήμα είναι να υπάρχει επιλογή για να δημιουργεί μια ιστοσελίδα με της μικρογραφίες κάτι σαν image gallery.
Ευχαριστώ όσους βοήθησαν.

Υ.Γ Όποιος γνωρίζει καλύτερα από σκριπτακια παρακαλώ να μου πει όποιες παρατηρήσεις έχει π.χ εάν ο κώδικας θα μπορούσε να γράφει με καλύτερο τρόπο, κάποια λάθη στα αγγλικά κ.λ.π

 

Body Mind Spirit

 Ανεβηκε διορθωμενο και σε κανονικο ιδιοκτητο σερβερ, γι' αμεσο download σε δευτερολεπτα, χωρις καμια αναμονη

Και οπως βλεπετε ειναι υπο δημιουργια και ο web χωρος, που θα δημιουργειται το προσωπικο album του καθενος, οταν θα ειναι ετοιμος ο Δημητρης (Τroikas),

για τη νεα προσθηκη.

Παρουσιαση και download link θα τα βρειτε: 

Make-Thumbnails-Folder: Αναβαθμισμένη νέα έκδοση

Υ.Γ: ΑΝ καποια/καποιος ειναι ορθογραφος στ'Αγγλικα, ας δωσει ενα χερακι να το ανεβασει ο Δημητρης και στο Gnome-look.

Ειναι ωραιο να βλεπουμε Ελληνικες δουλειες, ετσι? 

Το σκριπτ οποιος το εκανε αντιγραφη και επικοληση απο εδω μπορει να μην δουλευε σωστα - τα εκανα λιγο μανταρα με τον κειμενογραφο του φορουμ - τωρα διορθωθηκε και ειναι οκ.

Body Mind Spirit

Το σκριπτ ξαναγράφεται σε python αυτή τη φορά, σε λίγες μέρες θα το ανεβάσω να μου πείτε γνώμες.

enas eukolos tropos gia na elegxetai an ena programma einai egkatestimeno meso kapoio script einai o akolou8os

$(which zenity) 2> /dev/null

if [ $? = 1 ]; then
echo "Zenity is not installed."
exit 1
fi
.....
.....
code

H which sou epistrefei to path pou brisketai egkatestimeno ena programma, otan to $? exei timi 1 DEN iparxei sto sistima eno otan exei timi 0 iparxei

An to zenity to exo kanei install sto /usr/local/bin ti ginete se auti tin periptosi?

slackware]enas eukolos tropos gia na elegxetai an ena programma einai egkatestimeno meso kapoio script einai o akolou8os

$(which zenity) 2> /dev/null

if [ $? = 1 ]; then
echo "Zenity is not installed."
exit 1
fi
.....
.....
code

H which sou epistrefei to path pou brisketai egkatestimeno ena programma, otan to $? exei timi 1 DEN iparxei sto sistima eno otan exei timi 0 iparxei

An to zenity to exo kanei install sto /usr/local/bin ti ginete se auti tin periptosi?



Δεν το γνώριζα αυτό μόλις το έμαθα, ευχαριστώ, θα το διορθώσω και πάλι ευχαριστώ.

Prosoxi, an grapseis
$(which zenity) 2>/dev/null
$(which rm) 2>/dev/null

if [ $? = 1 ]; then
koukourou
klp
klp
fi

kai den einai egkatestimeno to zenity alla i rm einai egkatestimeni tote  DEN 8a pareis to minima lathous oti to zenity den einai egkatestimeno. Opote se auto ton periptosi 8a prepei na to kaneis gia ka8e programma xorista pou 8es na deis an iparxei.

Episis kalo einai na min orizeis path esy opos  RM=/bin/rm px alla na xrisimopoieis tin which kapos etsi RM=$(which rm) # 8a sou epistrepsei to path pou einai i rm opou kai na einai ;-)

Βρε Slack, τι σε έπιασε με τα greeklish ξαφνικά;! Θα διαφωνήσω με το $(which ...) για το λόγο που είχα αναφέρει κ παλαιότερα σε αυτή τη κουβέντα: pre. [email protected]:~$ which rm /bin/rm [email protected]:~$ touch ~/bin/rm [email protected]:~$ chmod +x ~/bin/rm [email protected]:~$ which rm /home/dimitris/bin/rm Με άλλα λόγια, σου επιστρέφει πιο θα έτρεχε, όχι το rm του συστήματος. Το πρόβλημα με αυτό είναι πρόβλημα ασφάλειας: είναι πολύ πιο εύκολο για κάποιον να σου βάλει μια κακόβουλη έκδοση του "rm" στο bin μέσα στο home σου από ότι στο /usr ή στο /usr/local. Στη συνέχεια, κάθε φορά που το script σου θα εκτελείται, θα τρέχει τη πειραγμένη έκδοση του rm. Γενικά λοιπόν, εκτελέσιμα χωρίς το πλήρες path τους, ή με path που σου επιστρέφει η which, δεν είναι το "ιδανικό" από άποψη ασφάλειας. Εναλλακτικά, παίζει να ξαναδηλώσεις τη μεταβλητή $PATH (χωρίς να την κάνεις export) στη αρχή του script, προκειμένου να αναγκάσεις τη which να ψάξει μόνο σε συγκεκριμένους φακέλους (πχ μόνο /bin, /usr/bin, /usr/local/bin).

Greek is not installed in this linux version...
Check this out
bash-4.1$ pwd
/home/gkapel
bash-4.1$ ls -ld bin
drwxr-xr-x 2 gkapel users 4096 Feb 16 13:01 bin
bash-4.1$ touch ~/bin/rm
bash-4.1$ chmod +x ~/bin/rm
bash-4.1$ ls -l ~/bin/rm
-rwxr-xr-x 1 gkapel users 0 Feb 16 13:02 /home/gkapel/bin/rm
bash-4.1$ which rm
/usr/bin/rm
bash-4.1$

Αν δώσεις κ ένα "echo $PATH", θα δεις ότι το home/gkapel/bin είναι στη περίπτωση σου δηλωμένο πριν το /usr/bin, οπότε - πάντα στη περίπτωση σου - το /usr/bin έχει προτεραιότητα στην αναζήτηση της "which". Συνήθως όμως συμβαίνει το ανάποδο, που είναι κ πιο λογικό νομίζω: το bin στο home δηλώνεται τελευταίο στο PATH, ούτως ώστε αν έχω ένα binary στο /usr/bin (πχ το "skype") κ ένα script στο home μου με το ίδιο όνομα που τρέχει το binary με κάποιες παράμετρους (πχ "LD_PRELOAD="..." /usr/bin/skype"), να τρέχει το δεύτερο όποτε γράφω απλά "skype". Γενικά το πρόβλημα αυτό έχει απασχολήσει πολλά φόρουμ, blogs κ mailing lists στο παρελθόν. Πχ: http://www.innovationsts.com/blog/?p=2363 https://bbs.archlinux.org/viewtopic.php?pid=508677