Πώς να χρησιμοποιήσετε τη μετονομασία Command στο Linux

Εξοικειωθείτε με τη δύναμη μετονομασίας αρχείων του κόσμου του Linux και ξεκουραστείτε στο mv—και στον εαυτό σας. Η μετονομασία είναι ευέλικτη, γρήγορη και μερικές φορές ακόμα πιο εύκολη. Ακολουθεί ένα σεμινάριο για αυτό το εργοστάσιο ισχύος μιας εντολής.

Τι συμβαίνει με το mv;

Δεν υπάρχει τίποτα κακό με το mv. Η εντολή κάνει μια χαρά δουλειά, και βρίσκεται σε όλες τις διανομές Linux, στο macOS και σε άλλα λειτουργικά συστήματα παρόμοια με το Unix. Άρα είναι πάντα διαθέσιμο. Αλλά μερικές φορές χρειάζεστε μόνο μια μπουλντόζα, όχι ένα φτυάρι.

Η εντολή mv έχει έναν σκοπό στη ζωή, και αυτός είναι η μετακίνηση αρχείων. Είναι μια ευχάριστη παρενέργεια ότι μπορεί να χρησιμοποιηθεί για τη μετακίνηση ενός υπάρχοντος αρχείου σε ένα νέο αρχείο, με νέο όνομα. Το καθαρό αποτέλεσμα είναι να μετονομάσουμε το αρχείο, ώστε να έχουμε αυτό που θέλουμε. Αλλά το mv δεν είναι ένα αποκλειστικό εργαλείο μετονομασίας αρχείων.

Μετονομασία μεμονωμένου αρχείου με mv

Για να χρησιμοποιήσετε το mv για να μετονομάσετε ένα αρχείο, πληκτρολογήστε mv, ένα διάστημα, το όνομα του αρχείου, ένα διάστημα και το νέο όνομα που θέλετε να έχει το αρχείο. Στη συνέχεια πατήστε Enter.

Μπορείτε να χρησιμοποιήσετε το ls για να ελέγξετε ότι το αρχείο έχει μετονομαστεί.

mv oldfile.txt newfile.txt
ls *.txt

Μετονομασία πολλών αρχείων με mv

Τα πράγματα γίνονται πιο δύσκολα όταν θέλετε να μετονομάσετε πολλά αρχεία. Το mv δεν έχει τη δυνατότητα να ασχοληθεί με τη μετονομασία πολλών αρχείων. Πρέπει να καταφύγετε στη χρήση κομψών κόλπων του Bash. Αυτό είναι εντάξει αν γνωρίζετε κάποιο fu γραμμής εντολών μεσαίου βαθμού, αλλά η πολυπλοκότητα της μετονομασίας πολλών αρχείων με mv έρχεται σε πλήρη αντίθεση με την ευκολία χρήσης του mv για τη μετονομασία ενός μεμονωμένου αρχείου.

Τα πράγματα κλιμακώνονται γρήγορα.

Ας υποθέσουμε ότι έχουμε έναν κατάλογο με μια ποικιλία αρχείων σε αυτόν, διαφορετικών τύπων. Ορισμένα από αυτά τα αρχεία έχουν επέκταση “.prog”. Θέλουμε να τα μετονομάσουμε στη γραμμή εντολών έτσι ώστε να έχουν επέκταση “.prg”.

Πώς μπερδεύουμε το mv να το κάνει αυτό για εμάς; Ας ρίξουμε μια ματιά στα αρχεία.

ls *.prog -l

Εδώ είναι ένας τρόπος για να το κάνετε που δεν καταφεύγει στη σύνταξη ενός πραγματικού αρχείου σεναρίου Bash.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

για f σε *.prog;  κάνε mv --

Δούλεψε αυτό; Ας ελέγξουμε τα αρχεία και ας δούμε.

ls *.pr*

Λοιπόν, ναι, λειτούργησε. Είναι όλα αρχεία “.prg” τώρα και δεν υπάρχουν αρχεία “.prog” στον κατάλογο.

Τι συνέβη μόλις τώρα?

Τι έκανε πραγματικά αυτή η μακρά εντολή; Ας το αναλύσουμε.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

Το πρώτο μέρος ξεκινά έναν βρόχο που πρόκειται να επεξεργαστεί κάθε αρχείο “.prog” στον κατάλογο, με τη σειρά του.

  Χρονικές σημάνσεις αρχείων Linux Επεξήγηση: atime, mtime και ctime

Το επόμενο μέρος λέει τι θα κάνει η επεξεργασία. Χρησιμοποιεί mv για να μετακινήσει κάθε αρχείο σε ένα νέο αρχείο. Το νέο αρχείο θα ονομαστεί με το όνομα του αρχικού αρχείου εξαιρουμένου του τμήματος “.prog”. Αντ’ αυτού θα χρησιμοποιηθεί μια νέα επέκταση “.prg”.

Πρέπει να υπάρξει ένας απλούστερος τρόπος

Το πιο σίγουρα. Είναι η εντολή μετονομασίας.

Η μετονομασία δεν αποτελεί μέρος μιας τυπικής διανομής Linux, επομένως θα χρειαστεί να την εγκαταστήσετε. Έχει επίσης διαφορετικό όνομα σε διαφορετικές οικογένειες Linux, αλλά όλες λειτουργούν με τον ίδιο τρόπο. Θα πρέπει απλώς να αντικαταστήσετε το κατάλληλο όνομα εντολής σύμφωνα με τη γεύση Linux που χρησιμοποιείτε.

στις διανομές που προέρχονται από το Ubuntu και το Debian εγκαθιστάτε τη μετονομασία ως εξής:

sudo apt-get install rename

Σε διανομές που προέρχονται από το Fedora και το RedHat εγκαθιστάτε το prename ως εξής. Σημειώστε το αρχικό “p”, που σημαίνει Perl.

sudo dnf install prename

Για να το εγκαταστήσετε στο Manjaro Linux χρησιμοποιήστε την ακόλουθη εντολή. Σημειώστε ότι η εντολή μετονομασίας ονομάζεται perl-rename.

sudo pacman -Syu perl-rename

Ας το ξανακάνουμε

Και αυτή τη φορά θα χρησιμοποιήσουμε μετονομασία. Θα επαναφέρουμε το ρολόι έτσι ώστε να έχουμε ένα σύνολο αρχείων “.prog”.

ls *.prog

Τώρα ας χρησιμοποιήσουμε την ακόλουθη εντολή για να τα μετονομάσουμε. Στη συνέχεια, θα ελέγξουμε με ls εάν λειτούργησε. Θυμηθείτε να αντικαταστήσετε τη μετονομασία με το κατάλληλο όνομα εντολής για το Linux σας, εάν δεν χρησιμοποιείτε Ubuntu ή Linux που προέρχεται από το Debian.

rename 's/.prog/.prg/' *.prog
ls *.pr*

Αυτό λειτούργησε, τώρα είναι όλα τα αρχεία “.prg” και δεν υπάρχουν αρχεία “.prog” στον κατάλογο.

Τι συνέβη αυτή τη φορά;

Ας εξηγήσουμε αυτό το κομμάτι της μαγείας, σε τρία μέρη.

Το πρώτο μέρος είναι το όνομα της εντολής, μετονομασία (ή prename ή perl-rename , για τις άλλες διανομές).

Το τελευταίο μέρος είναι *.prog, το οποίο λέει μετονομασία για να λειτουργήσει σε όλα τα αρχεία “.prog”.

Το μεσαίο τμήμα ορίζει την εργασία που θέλουμε να γίνει σε κάθε όνομα αρχείου. Το s σημαίνει υποκατάστατο. Ο πρώτος όρος (.prog) είναι η μετονομασία που θα αναζητηθεί σε κάθε όνομα αρχείου και ο δεύτερος όρος (.prg) είναι αυτός με τον οποίο θα αντικατασταθεί.

Το μεσαίο τμήμα της εντολής, ή η κεντρική έκφραση, είναι ένα Perl ‘κοινή έκφρασηΚαι είναι αυτό που δίνει στην εντολή μετονομασίας την ευελιξία της.

Αλλαγή άλλων τμημάτων ενός ονόματος αρχείου

Έχουμε αλλάξει τις επεκτάσεις ονομάτων αρχείων μέχρι στιγμής, ας τροποποιήσουμε άλλα μέρη των ονομάτων αρχείων.

Στον κατάλογο υπάρχουν πολλά αρχεία πηγαίου κώδικα C. Όλα τα ονόματα αρχείων έχουν πρόθεμα “slang_”. Μπορούμε να το ελέγξουμε αυτό με το ls.

ls sl*.c

Θα αντικαταστήσουμε όλες τις εμφανίσεις του “slang_” με το “sl_”. Η μορφή της εντολής μας είναι ήδη γνωστή. Απλώς αλλάζουμε τον όρο αναζήτησης, τον όρο αντικατάστασης και τον τύπο αρχείου.

rename 's/slang_/sl_' *.c

Αυτή τη φορά ψάχνουμε για αρχεία “.c” και αναζητούμε “slang_”. Κάθε φορά που βρίσκεται το “slang_” σε ένα όνομα αρχείου, αντικαθίσταται από το “sl_”.

  Γιατί το Desktop Linux εξακολουθεί να έχει σημασία

Μπορούμε να ελέγξουμε το αποτέλεσμα αυτής της εντολής επαναλαμβάνοντας την εντολή ls από πάνω με τις ίδιες παραμέτρους:

ls sl*.c

Διαγραφή μέρους ενός ονόματος αρχείου

Μπορούμε να αφαιρέσουμε ένα μέρος ενός ονόματος αρχείου αντικαθιστώντας τον όρο αναζήτησης με τίποτα.

ls *.c
rename 's/sl_//' *.c
ls *.c

Μπορούμε να δούμε από την εντολή ls ότι τα αρχεία μας “.c” είναι όλα προσαρτημένα με “sl_”. Ας το ξεφορτωθούμε τελείως.

Η εντολή μετονομασία ακολουθεί την ίδια μορφή όπως πριν. Θα αναζητήσουμε αρχεία “.c”. Ο όρος αναζήτησης είναι “sl_”, αλλά δεν υπάρχει όρος αντικατάστασης. Δύο ανάστροφες κάθετες χωρίς τίποτα ανάμεσά τους δεν σημαίνουν τίποτα, μια άδεια χορδή.

Η μετονομασία θα επεξεργαστεί κάθε αρχείο “.c” με τη σειρά. Θα αναζητήσει “sl_” στο όνομα αρχείου. Αν βρεθεί, δεν θα αντικατασταθεί με τίποτα. Με άλλα λόγια, ο όρος αναζήτησης διαγράφεται.

Η δεύτερη χρήση της εντολής ls επιβεβαιώνει ότι το πρόθεμα “sl_” έχει αφαιρεθεί από κάθε αρχείο “.c”.

Περιορίστε τις αλλαγές σε συγκεκριμένα μέρη ονομάτων αρχείων

Ας χρησιμοποιήσουμε το ls για να δούμε αρχεία που έχουν τη συμβολοσειρά “param” στο όνομα του αρχείου τους. Στη συνέχεια, θα χρησιμοποιήσουμε μετονομασία για να αντικαταστήσουμε αυτήν τη συμβολοσειρά με τη συμβολοσειρά “παράμετρος”. Θα χρησιμοποιήσουμε το ls για άλλη μια φορά για να δούμε την επίδραση που είχε η εντολή μετονομασίας σε αυτά τα αρχεία.

ls *param*
rename 's/param/parameter' *.c
ls *param*

Βρέθηκαν τέσσερα αρχεία που έχουν “param” στο όνομα του αρχείου τους. Τα param.c, param_one.c και param_two.c έχουν όλα “param” στην αρχή του ονόματός τους. Το third_param.c έχει “param” στο τέλος του ονόματός του, ακριβώς πριν από την επέκταση.

Η εντολή μετονομασίας θα αναζητήσει το “param” παντού στο όνομα του αρχείου και θα το αντικαταστήσει με το “parameter” σε όλες τις περιπτώσεις.

Η δεύτερη χρήση της εντολής ls μας δείχνει ότι αυτό ακριβώς συνέβη. Είτε το “param” ήταν στην αρχή ή στο τέλος του ονόματος αρχείου, έχει αντικατασταθεί από το “parameter”.

Μπορούμε να χρησιμοποιήσουμε τους μεταχαρακτήρες του Perl για να βελτιώσουμε τη συμπεριφορά της μεσαίας έκφρασης. Οι μεταχαρακτήρες είναι σύμβολα που αντιπροσωπεύουν θέσεις ή ακολουθίες χαρακτήρων. Για παράδειγμα, ^ σημαίνει “αρχή μιας συμβολοσειράς”, $ σημαίνει “τέλος μιας συμβολοσειράς” και . σημαίνει οποιονδήποτε μεμονωμένο χαρακτήρα (εκτός από έναν χαρακτήρα νέας γραμμής).

Θα χρησιμοποιήσουμε την αρχή του μεταχαρακτήρα συμβολοσειράς ( ^ ) για να περιορίσουμε την αναζήτησή μας στην αρχή των ονομάτων αρχείων.

ls *param*.c
rename 's/^parameter/value/' *.c
ls *param*.c
ls value*.c

Τα αρχεία που μετονομάσαμε νωρίτερα παρατίθενται και μπορούμε να δούμε ότι η συμβολοσειρά “παράμετρος” βρίσκεται στην αρχή τριών ονομάτων αρχείων και βρίσκεται στο τέλος ενός από τα ονόματα αρχείων.

Η εντολή μετονομασίας χρησιμοποιεί τον μεταχαρακτήρα έναρξης της γραμμής (^) πριν από τον όρο αναζήτησης “παράμετρος”. Αυτό λέει ότι η μετονομασία πρέπει να θεωρείται ότι έχει βρεθεί ο όρος αναζήτησης μόνο εάν βρίσκεται στην αρχή του ονόματος αρχείου. Η συμβολοσειρά αναζήτησης “παράμετρος” θα αγνοηθεί εάν βρίσκεται οπουδήποτε αλλού στο όνομα του αρχείου.

  Οι 5 καλύτεροι πελάτες Torrent για Linux

Ελέγχοντας με το ls, μπορούμε να δούμε ότι το όνομα αρχείου που είχε “παράμετρο” στο τέλος του ονόματος αρχείου δεν έχει τροποποιηθεί, αλλά τα τρία ονόματα αρχείων που είχαν “παράμετρο” στην αρχή των ονομάτων τους αντικαταστάθηκαν από τη συμβολοσειρά αναζήτησης από το υποκατάστατο όρος «αξία».

Η δύναμη της μετονομασίας βρίσκεται στη δύναμη του Perl. Ολα τα δύναμη της Perl είναι στη διάθεσή σας.

Αναζήτηση με ομαδοποιήσεις

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

Σε αυτό το παράδειγμα χρησιμοποιούμε το ls για να ελέγξουμε ποια αρχεία έχουμε που ξεκινούν με “str”. Υπάρχουν δύο από αυτά, το string.c και το strangle.c. Μπορούμε να μετονομάσουμε και τις δύο συμβολοσειρές ταυτόχρονα χρησιμοποιώντας μια τεχνική που ονομάζεται ομαδοποίηση.

Η κεντρική έκφραση αυτής της εντολής μετονομασίας θα αναζητήσει συμβολοσειρές μέσα σε ονόματα αρχείων που έχουν την ακολουθία χαρακτήρων “stri” ή “stra”, όπου αυτές οι ακολουθίες ακολουθούνται αμέσως από το “ng”. Με άλλα λόγια, ο όρος αναζήτησής μας θα αναζητήσει “string” και “strang”. Ο όρος αντικατάστασης είναι “μπαμ”.

ls str*.c
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.c

Η χρήση του ls για δεύτερη φορά επιβεβαιώνει ότι το string.c έχει γίνει bang.c και το strangle.c είναι πλέον bangle.c.

Χρήση μεταφράσεων με μετονομασία

Η εντολή μετονομασία μπορεί να εκτελέσει ενέργειες σε ονόματα αρχείων που ονομάζονται μεταφράσεις. Ένα απλό παράδειγμα μετάφρασης θα ήταν να επιβάλετε ένα σύνολο ονομάτων αρχείων σε κεφαλαία.

Στην παρακάτω εντολή μετονομασίας, παρατηρήστε ότι δεν χρησιμοποιούμε s/ για να ξεκινήσουμε την κεντρική έκφραση, χρησιμοποιούμε y/. Αυτό σημαίνει μετονομασία ότι δεν κάνουμε αντικατάσταση. κάνουμε μετάφραση.

Ο όρος az είναι μια έκφραση Perl που σημαίνει όλους τους πεζούς χαρακτήρες της ακολουθίας από το a έως το z. Ομοίως, ο όρος ΑΖ αντιπροσωπεύει όλα τα κεφαλαία γράμματα στην ακολουθία από το Α έως το Ω.

Η κεντρική έκφραση αυτής της εντολής θα μπορούσε να παραφραστεί ως «εάν κάποιο από τα πεζά γράμματα από το a έως το z βρεθεί στο όνομα του αρχείου, αντικαταστήστε τα με τους αντίστοιχους χαρακτήρες από την ακολουθία κεφαλαίων χαρακτήρων από το Α έως το Ω».

Για να αναγκάσετε τα ονόματα αρχείων όλων των αρχείων “.prg” σε κεφαλαία, χρησιμοποιήστε αυτήν την εντολή:

μετονομάστε ‘y/az/AZ/’ *.prg

ls *.PRG

Η εντολή ls μας δείχνει ότι όλα τα ονόματα αρχείων “.prg” είναι τώρα με κεφαλαία. Στην πραγματικότητα, για να είμαστε αυστηρά ακριβείς, δεν είναι πια αρχεία “.prg”. Είναι αρχεία “.PRG”. Το Linux κάνει διάκριση πεζών-κεφαλαίων.

Μπορούμε να αντιστρέψουμε αυτήν την τελευταία εντολή αντιστρέφοντας τη θέση των όρων az και AZ στην κεντρική έκφραση.

μετονομάστε ‘y/AZ/az/’ *.PRG

ls *.prg

Δεν μαθαίνεις την Perl σε πέντε λεπτά

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