Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux



Βασικά Takeaways

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

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

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

Πώς λειτουργούν τα ονόματα αρχείων Linux;

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

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

Στο Linux, ένα όνομα αρχείου μπορεί να περιέχει οποιονδήποτε χαρακτήρα εκτός από την κάθετο “/” και τον μηδενικό χαρακτήρα, 0x00. Ο χαρακτήρας null χρησιμοποιείται για να επισημάνει το τέλος μιας συμβολοσειράς, επομένως δεν μπορεί να υπάρχει στην ίδια τη συμβολοσειρά, διαφορετικά το Linux θα περικόψει το όνομα αρχείου στη θέση του μηδενικού χαρακτήρα. Η κάθετο “/” χρησιμοποιείται ως διαχωριστικό στις διαδρομές καταλόγου.

Τα ονόματα αρχείων κάνουν διάκριση πεζών-κεφαλαίων,

και μπορεί να έχει μήκος έως 255 byte

, συμπεριλαμβανομένου του μηδενικού χαρακτήρα. Οι διαδρομές καταλόγου μπορούν να έχουν μήκος έως και 4096 byte, συμπεριλαμβανομένου του μηδενικού χαρακτήρα. Σημειώστε ότι αυτό είναι το μήκος τους σε byte, το οποίο μπορεί να μην ισοδυναμεί απευθείας με χαρακτήρες. Οι χαρακτήρες Unicode 16-bit, για παράδειγμα, παίρνουν δύο byte ο καθένας.

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

Λειτουργικό Σύστημα Δίσκου της Microsoft

DOS, δεν είχε διάκριση πεζών-κεφαλαίων και είχε όριο ονόματος αρχείου οκτώ χαρακτήρων, συν μια επέκταση τριών χαρακτήρων.

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

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

Γιατί τα κενά στα ονόματα αρχείων Linux είναι ένας πόνος

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

touch

για να δημιουργήσετε ένα νέο αρχείο που ονομάζεται “το νέο μου αρχείο.txt.”

touch my new file.txt

ls

Οπως μπορούμε να δούμε,

ls

μας δείχνει ότι δημιουργήθηκαν τρία αρχεία, ένα με το όνομα “my”, ένα άλλο με το όνομα “new” και ένα ακόμη με το όνομα “file.txt”.

Σημειώστε ότι

touch

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

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

Τρόπος προσφοράς και διαφυγής διαστημάτων

Αν αναφέρουμε ολόκληρο το όνομα αρχείου,

touch

γνωρίζει ότι πρέπει να αντιμετωπίζει το παρατιθέμενο κείμενο ως ένα ενιαίο όρισμα.

touch 'my new file.txt'

ls


Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, TechWar.gr

Αυτή τη φορά έχουμε το μοναδικό αρχείο που περιμένουμε.

Μπορούμε να έχουμε το ίδιο αποτέλεσμα αν χρησιμοποιήσουμε τον χαρακτήρα ανάστροφης κάθετο “


” για να ξεφύγουν από τα κενά. Με το να “ξεφύγουν” από τα κενά δεν αντιμετωπίζονται ως ειδικοί χαρακτήρες — δηλαδή διαχωριστές επιχειρημάτων — θεωρούνται απλοί παλιοί χώροι.

touch my second new file.txt

ls


Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, TechWar.gr

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

cp dir one/my text file.txt dir two/my text file.bak

ls


Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, TechWar.gr

Αυτή η εντολή αντιγράφει ένα μεμονωμένο αρχείο κειμένου από έναν κατάλογο που ονομάζεται “dir one” σε έναν κατάλογο που ονομάζεται “dir two” και αποθηκεύει το αντίγραφο ως αρχείο BAK. Και είναι ένα αρκετά απλό παράδειγμα.

Πώς να διορθώσετε το

του χώρου στην πηγή του

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

mynewtextfile.txt

Ομολογουμένως, αυτή είναι μια ισχυρή λύση, αλλά εξακολουθεί να είναι άσχημη. Υπάρχουν καλύτερες επιλογές, όπως η χρήση παύλων “

-

“ή υπογραμμίζει”

_

«για να χωρίσω τα λόγια σου.

my-new-text-file.txt

my_new_text_file.txt

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

CamelCase

για να κάνετε τα ονόματα των αρχείων σας αναγνώσιμα, ως εξής:

MyNewTextFile.txt

Η επέκταση καρτελών διευκολύνει την αντιμετώπιση των χώρων

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

Μπορείτε να χρησιμοποιήσετε την επέκταση καρτέλας για να σας βοηθήσει να “συμπληρώσετε” με ακρίβεια τα ονόματα αρχείων για εμάς. Ας πούμε ότι θέλουμε να διαγράψουμε το αρχείο BAK που δημιουργήσαμε στο “dir two”, χρησιμοποιώντας

rm

.

Ξεκινάμε πληκτρολογώντας “rm dir” επειδή χρησιμοποιούμε το

rm

εντολή και γνωρίζουμε ότι το όνομα του καταλόγου ξεκινά με “dir.”

rm dir


Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, TechWar.gr

Πατώντας το πλήκτρο “Tab” το Bash πραγματοποιεί σάρωση για αντιστοιχίσεις στον τρέχοντα κατάλογο.


Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, TechWar.gr

Υπάρχουν δύο κατάλογοι που ξεκινούν με “dir”, και στις δύο περιπτώσεις ο επόμενος χαρακτήρας είναι ένα κενό. Έτσι ο Bash προσθέτει τον χαρακτήρα ανάστροφης κάθετου “


” και ένα διάστημα. Στη συνέχεια, το Bash περιμένει να παρέχουμε τον επόμενο χαρακτήρα. Χρειάζεται τον επόμενο χαρακτήρα για να διαφοροποιήσει τις δύο πιθανές αντιστοιχίσεις σε αυτόν τον κατάλογο.

Θα πληκτρολογήσουμε ένα “t”, για “δύο”, και στη συνέχεια θα πατήσουμε “Tab” άλλη μια φορά.


Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, TechWar.gr

Το Bash συμπληρώνει το όνομα του καταλόγου για εμάς και περιμένει να πληκτρολογήσουμε την αρχή του ονόματος αρχείου.

Έχουμε μόνο ένα αρχείο σε αυτόν τον κατάλογο, οπότε πληκτρολογώντας το πρώτο γράμμα του ονόματος αρχείου, “m”, είναι αρκετό για να ενημερώσουμε τον Bash ποιο αρχείο θέλουμε να χρησιμοποιήσουμε. Πληκτρολογώντας “m” και πατώντας “Tab” ολοκληρώνεται το όνομα αρχείου για εμάς και το “Enter” εκτελεί ολόκληρη την εντολή.


Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, TechWar.gr

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

Πώς να χρησιμοποιήσετε ονόματα αρχείων με κενά σε σενάρια Bash

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

Αυτό το μικρό σενάριο ελέγχει τον τρέχοντα κατάλογο για αρχεία που ταιριάζουν με το μοτίβο αρχείων “*.txt” και τα αποθηκεύει σε μια μεταβλητή που ονομάζεται

file_list

. ΕΝΑ

for

Ο

χρησιμοποιείται για να εκτελέσει μια απλή

σε κάθε ένα.

#!/bin/bashfile_list=*.txtfor file in $file_listdo ls -hl $filedone

Αντιγράψτε αυτό το κείμενο σε ένα πρόγραμμα επεξ

ς και αποθηκεύστε το σε ένα αρχείο που ονομάζεται “files.sh”. Στη συνέχεια χρησιμοποιήστε το

chmod

εντολή για να γίνει εκτελέσιμο.

chmod +x files.sh


Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, TechWar.gr

Έχουμε μερικά αρχεία σε αυτόν τον κατάλογο. Το ένα έχει ένα απλό όνομα αρχείου και τα άλλα δύο χρησιμοποιούν κάτω παύλες “

_

“ή παύλες”

-

” αντί για κενά. Αυτό βλέπουμε όταν εκτελούμε το σενάριο.

./files.sh


Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, TechWar.gr

Αυτό φαίνεται να λειτουργεί καλά. Αλλά ας αλλάξουμε τα αρχεία στον κατάλογο για αρχεία που περιέχουν κενά στα ονόματά τους.

./files.sh


Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, TechWar.gr

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

$file

μεταβλητή μέσα στο

for

βρόχος.

#!/bin/bashfile_list=*.txtfor file in $file_listdols -hl "$file"done

Σημειώστε ότι το σύμβολο του δολαρίου “

$

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

./files.sh


Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, Πώς να αντιμετωπίσετε τα κενά σε ονόματα αρχείων στο Linux, TechWar.gr

Σε απόσταση, αλλά όχι ξεφλουδισμένο

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


VIA:

HowToGeek.com


Leave A Reply



Cancel Reply

Your email address will not be published.