Δημοσιεύτηκε: 30 Αύγ 2011, 23:12
από lucinos
Πηγαίνετε στον φάκελο ~/playground/ground/ (έχει δημιουργηθεί σε προηγούμενη ενότητα)

Όταν θα είστε στον φάκελο ~/playground/ground/ τρέξτε το ακόλουθο:
Κώδικας: Επιλογή όλων
mkdir {_,}{,{Z..V},_{0..7}}{d,8}

Με αυτήν την εντολή θα δημιουργηθεί ένας σκασμός φακέλων!

Ας υποθέσουμε ότι θέλουμε τα ονόματα τών φακέλων που το πρώτο σύμβολο είναι _ ακολουθούνται από ακριβώς ένα γράμμα και τελειώνουν σε 8. Το σύμβολο ? (αγγλικό ερωτηματικό) χρησιμεύει ως μπαλαντέρ. Μπορεί να χρησιμοποιηθεί ως οποιοδήποτε σύμβολο, αλλά ένα ακριβώς. Μπορούμε λοιπόν να το χρησιμοποιήσουμε για να δούμε τα ονόματα τών φακέλων με τα χαρακτηριστικά που θέλουμε γράφοντας απλά:
Κώδικας: Επιλογή όλων
ls -d _?8


Υπάρχει όμως και ένας ακόμα γενικότερος μπαλαντέρ, το * (αστεράκι). Δίνοντας:
Κώδικας: Επιλογή όλων
ls -d _*8

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

Υπάρχουν και άλλοι μπαλαντέρ όμως! Το [έκφραση] μπορεί να χρησιμεύσει ως μπαλαντέρ. Μέσα στην έκφραση το ! σημαίνει την άρνηση ενός συμβόλου. Για παράδειγμα με:
Κώδικας: Επιλογή όλων
ls -d [!_]*

θα δείτε τούς φακέλους που δεν ξεκινάνε από _
με:
Κώδικας: Επιλογή όλων
ls -d *[5-8]*

θα δείτε τούς φακέλους που περιέχουν αριθμούς από το 5 ως το 8
με:
Κώδικας: Επιλογή όλων
ls -d *[7Wd]*

θα δείτε όσους φακέλους περιέχουν ένα από τα 7 W ή d. Με την ευκαιρία το θαυμαστικό μπορεί να χρησιμοποιηθεί και με πολλά σύμβολα πχ [!7Wd] σημαίνει όχι ένα από τα 7 W και d. Αλλά προφανώς το *[!7Wd]* θα σήμαινε όλα τα αρχεία που που περιέχουν τουλάχιστον έναν χαρακτήρα που δεν είναι από τούς 7 W ή d.

Αναφέρω ακόμα το [:lower:] σημαίνει τούς πεζούς χαρακτήρες και [:upper:] τούς κεφαλαίους. (υπάρχουν και άλλες κλάσσεις χαρακτήρων). Α, τώρα που το θυμήθηκα, τις εκφράσεις τις βάζουμε πάντα μέσα σε αγκύλες. Για αυτό πρέπει να γράψετε [[:lower:]].

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

Για να διαγράψετε όλους τούς φακέλους που βρίσκονται στο ~/playground/ground/ μπορείτε απλά (βρίσκεστε πάντα στον ~/playground/ground/ ) να δώσετε:
Κώδικας: Επιλογή όλων
rmdir *


Είναι πολύ δυνατό εργαλείο αλλά πρέπει να δείχνετε αρκετή προσοχή.
Για παράδειγμα έστω ότι θέλετε να διαγράψετε όλα τα αρχεία που τελειώνουν σε .html το ακόλουθο είναι ΛΑΘΟΣ
Κώδικας: Επιλογή όλων
rm * .html

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