Ισοπεδώστε μια ιεραρχία αρχείων ένθετου καταλόγου & από τη γραμμή εντολών του Mac OS X

Anonim

Χρειάστηκε ποτέ να ισοπεδώσετε μια δομή καταλόγου, μεταφέροντας όλα τα περιεχόμενα του αρχείου από τους θυγατρικούς φακέλους καταλόγου σε έναν μόνο φάκελο; Ενώ μπορείτε να το κάνετε αυτό χειροκίνητα μετακινώντας αρχεία και φακέλους από το σύστημα αρχείων του Mac OS X ή του Linux, μια πιο γρήγορη επιλογή είναι να στραφείτε στη γραμμή εντολών. Ίσως κάποια στιγμή δημιουργήσατε μια ένθετη ιεραρχία καταλόγων που τώρα πρέπει να αναιρέσετε μετακινώντας όλα τα αρχεία από αυτούς τους ένθετους φακέλους και πίσω σε έναν ενιαίο κατάλογο ή ίσως θέλετε να απλοποιήσετε μια δομή καταλόγου, ανεξάρτητα από το λόγο, αυτό το κόλπο λειτουργεί αρκετά καλά.

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

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

Για να κατανοήσουμε καλύτερα τι προσπαθούμε να επιτύχουμε, ας πάρουμε ένα παράδειγμα φανταστικής δομής καταλόγου που ονομάζεται TestDirectory που βρίσκεται σε έναν φάκελο Home χρήστη. Σε αυτό το παράδειγμα, το TestDirectory περιέχει υποφακέλους όπως SubDirectory1, SubDirectory2, SubDirectory3, κ.λπ., ο καθένας με αρχεία σε αυτούς τους αντίστοιχους φακέλους. Αυτό που θέλουμε να κάνουμε εδώ είναι να ισοπεδώσουμε τη δομή του καταλόγου, μετακινώντας όλα τα αρχεία από το SubDirectory(X) στον γονικό κατάλογο "TestDirectory".Ο αρχικός κατάλογος και τα περιεχόμενα που εμφανίζονται αναδρομικά με το θα μπορούσαν να μοιάζουν κάπως έτσι:

$ βρείτε ~/TestDirectory/ -type f ~/TestDirectory/rooty.jpg ~/TestDirectory/SampleDirectory1/beta-tool-preview.jpg ~/TestDirectory/SampleDirectory1 /alphabeta-tool.jpg ~/TestDirectory/SampleDirectory2/test-tools.jpg ~/TestDirectory/SampleDirectory3/test-png.jpg ~/TestDirectory/SampleDirectory3/test1.jpg ~/TestDirectory.jpg3rectory/SampleDirectory

Για να ισοπεδώσετε αυτόν τον κατάλογο και τα περιεχόμενα του υποκαταλόγου στον φάκελο TestDirectory, θα χρησιμοποιήσετε την ακόλουθη συμβολοσειρά εντολών:

find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'

Μετά την ισοπέδωση των περιεχομένων του καταλόγου, θα πρέπει να μοιάζει με αυτό όταν εμφανίζεται στη λίστα:

~/TestDirectory/rooty.jpg ~/TestDirectory/beta-tool-preview.jpg ~/TestDirectory/alphabeta-tool.jpg ~/TestDirectory/test-tools .jpg ~/TestDirectory/test-png.jpg ~/TestDirectory/test1.jpg ~/TestDirectory/test2.jpg

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

Ισιώσεις δομής καταλόγου & ιεραρχίας ένθετων αρχείων με τη γραμμή εντολών

Έτοιμοι να συνεχίσετε; Η συμβολοσειρά εντολών που θα χρησιμοποιήσουμε για να ισοπεδώσουμε μια δομή καταλόγου και να μετακινήσουμε όλα τα αρχεία από υποκαταλόγους στη βάση του καταλόγου προορισμού είναι η εξής:

find -mindepth 2 -type f -exec mv -i '{}' ';'

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

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

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

Όπως αναφέρθηκε προηγουμένως, θα μπορούσατε επίσης να το κάνετε αυτό στο Finder του OS X ή τουλάχιστον να παρατηρήσετε τις αλλαγές αρχείων και φακέλων στο Finder. Επιλογή+κάνοντας κλικ στα μικρά βέλη στην προβολή λίστας ανοίγει όλους τους υποκαταλόγους, εμφανίζοντας την ιεραρχία φακέλων ως εξής:

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

Ισοπεδώστε μια ιεραρχία αρχείων ένθετου καταλόγου & από τη γραμμή εντολών του Mac OS X