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

Ελάτε να ασχοληθείτε με το αρχείο μετονομασίας του Powerhouse στον κόσμο του Linux και να δώσετε mv- και στον εαυτό σας - ένα υπόλοιπο. Renameείναι ευέλικτο, γρήγορο και μερικές φορές ακόμη πιο εύκολο. Εδώ είναι ένα σεμινάριο για αυτό το εργοστάσιο ισχύος μιας εντολής.

Τι είναι λάθος με το mv;

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

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

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

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

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

mv oldfile.txt newfile.txt
ls * .txt

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

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

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

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

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

ls * .prog -l

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

για f in * .prog; κάνετε mv - "$ f" "$ {f% .prog} .prg"

Μήπως αυτό δουλεύει; Ας ελέγξουμε τα αρχεία και να δούμε.

ls * .pr *

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

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

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

για f in * .prog; κάνετε mv - "$ f" "$ {f% .prog} .prg"

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

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

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

Σίγουρα. Είναι η renameεντολή.

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

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

sudo apt-get εγκατάσταση μετονομασία

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

sudo dnf εγκαταστήστε το όνομα

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

sudo pacman -Syu perl-μετονομασία

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

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

ls * .prog

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

μετονομασία 's / .prog / .prg /' * .prog
ls * .pr *

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

Τι συνέβη αυτό;

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

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

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

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

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

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

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

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

ls sl * .c

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

μετονομασία 's / slang_ / sl_' * .c

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

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

ls sl * .c

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

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

ls * .c
μετονομασία s / sl _ // '* .c
ls * .c

Μπορούμε να δούμε από την lsεντολή ότι όλα τα αρχεία ".c" προετοιμάζονται με "sl_" Ας το ξεφορτωθούμε εντελώς.

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

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

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

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

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

ls * param *
μετονομασία 's / param / parameter' * .c
ls * param *

Βρέθηκαν τέσσερα αρχεία που έχουν "param" στο όνομα αρχείου τους. param.c, param_one.c και param_two.c όλα έχουν "param" στην αρχή του ονόματός τους. Το Third_param.c έχει "param" στο τέλος του ονόματός του, λίγο πριν από την επέκταση.

Η renameεντολή πρόκειται να αναζητήσει "param" παντού στο όνομα αρχείου και να την αντικαταστήσει με "παράμετρο" σε όλες τις περιπτώσεις.

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

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

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

ls * param * .c
μετονομάστε την παράμετρο / ^ / τιμή / '* .c
ls * param * .c
Η τιμή * .c

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

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

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

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

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

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

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

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

Είναι str * .c
μετονομασία 's / (stri | stra) ng / bang /' * .c
Απαγόρευση * .c

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

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

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

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

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

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

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

μετονομασία "y / az / AZ / '* .prg

ls * .PRG

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

Μπορούμε να αντιστρέψουμε αυτήν την τελευταία εντολή αναστρέφοντας τη θέση a-zκαι τους A-Z όρους στην κεντρική έκφραση.

μετονομασία "y / AZ / az / '* .PRG

ls * .prg

Δεν ξέρετε το Perl σε πέντε λεπτά

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