Δημοσιεύτηκε: 24 Οκτ 2014, 16:00
από PapaNight
Βεβαίως φίλε μου.
Παρατηρώ πως η bash έχει κάποια θεματάκια με αριθμούς που ξεκινούν με μηδενικά, δηλαδή δεν τους θεωρεί δεκαδικούς και ακόμα και αν την αναγκάσεις να τους αντιμετωπίσει ως δεκαδικούς το αποτέλεσμα το βγάζει χωρίς τα μηδενικά. Οπότε θα πρέπει να σου γράψω ένα ποιο πολύπλοκο σκριπτ που μάλλον θα πρέπει να μπει σε αρχείο κειμένου και να το τρέχεις έτσι. Κρίμα γιατί θα ήθελα να το καταλάβεις εύκολα και να ψηθείς με μια ωραία ασχολεία.

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

#!/bin/bash
echo "Από ποιον αριθμό να ξεκινάει η τελευταία αρίθμηση;"
read start #διαβάζουμε τον αριθμό από τον οποίο θα ξεκινάμε την νέα αρίθμιση.
i="$(( 10#$start - 1 ))" #τον μειώνουμε κατα ένα σε μια νέα μεταβλητή (θα μπορούσαμε και στην ίδια). θα δούμε παρακάτω γιατί.
if (( $i < 10 )) ; then i=00$i ; elif (( $i < 100 )) ; then i=0$i ; fi #προσθέτουμε μηδενικά για έιναι τριψήφιος
for file in * #για κάθε αρχειο.. βάλε το όνομα του σε μια μεταβλήτη $file και
do #κανε τα παρακάτω
i="$(( 10#$i + 1 ))" #αύξησε την $i κατά ένα. Η $i θα μετράει..
if (( $i < 10 )) ; then i=00$i ; elif (( $i < 100 )) ; then i=0$i ; fi #να ξαναβάλουμε τα μηδενικά #μπροστά γιατί στις πράξεις χάνονται
mv "$file" "${file:0:-7}$i".jpg #μετακίνησε το αρχείο $file σε .δες παρακάτω
done #τέλως επανάληψης.. ξαναξεκινάμε από το done με το $file να έχει το επόμενο όνομα αρχείου.

Αν δε ξέρεις πως να το κάνεις πες μου και θα σου δόσω αναλυτικά οδηγείες.

Περί μακρυναριου "${file:0:-7}$i".jpg :

Στη bash $file είναι μια μεταβλητή με όνομα file. ${file:0:-7} είναι ένα κομμάτι της $file που ξεκινά από την αρχή (το πρώτο γράμμα ψηφίο) γιατί έχουμε 0 μετά τις πρώτες άνω και κάτω τελείες και σου αφαιρεί τους επτά τελευταίους χαρακτήρες γιατί μετά έχουμε -7. Επτά γιατί jpg + . (τελεία) + 001 (ή 002..) είναι εφτά χαρακτήρες και εμείς θέλουμε να τους αλλάξουμε (δε θέλουμε όλους αλλά είναι ποιο έυκολο να ξηλώσουμε κατι παραπάνω και να το βάλουμε μετά.)

Μετά έχουμε το $ι που είναι το νούμερο που του δώσαμε και το αυξάνουμε κάθε φορά που πιάνουμε αρχείο. Αυτό δηλαδή θα δίνει το διαφορετικό νούμερο σε κάθε αρχειο.

Και μετά είναι το .jpg που εφόσων το ξηλώσαμε παραπάνω πρέπει να το ξαναβάλλουμε στη θέση του (αν και το Λίνουξ δε μασάει από καταλήξεις!) Θα παρατηρήσεις οτι έκλεισα τα εισαγωγικά πριν το .jpg . Αυτό γιατί αλλιώς η bash δε θα νόμιζε πως η προγηούμενη μεταβλητή δεν είναι η $i αλλά η $i.jpg (που δεν υπάρχει) και φυσικά δε θα κολούσε και το .jpg

Επειδή γράφεις παραπάνω πως ψήθηκες για τον προγραμματισμό, εγώ θα σου προτείνω αντί pascal... την ίδια τη bash για εξάσκηση καθώς μαθαίνωντας μπορείς να βρίσκεις και εφαρμογές της σε ποιο καθημερινή χρήση.

ΑΛΛΑ μην ξεχνάς πως πειραματισμούς και .. εκμάθηση δεν κάνουμε πάνω στο λειτουργικό μας σύστημα ή στα σημαντικά μας αρχεία (σε αυτά τρέχουμε μόνο εντολές που καταλαβαίνουμε και τι κάνουν και γιατί θέλουμε να το κάνουν). Εξάλλου με τη bash είναι εύκολο να δημιοργείς ψευτικά αρχεία για πειραματισμούς :p
[url=http://mywiki.wooledge.org/BashGuide]Ορίστε[/code] και ένας κατά τη γνώμη μου πολύ καλός οδηγός για τη bash