Παράδειγμα Χρήσεις της εντολής "xargs"

Περιγραφή και εισαγωγή

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

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

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

Γενικά, η εντολή xargs θα πρέπει να χρησιμοποιείται αν η έξοδος μίας εντολής πρόκειται να χρησιμοποιηθεί ως μέρος των επιλογών ή των επιχειρημάτων μιας δεύτερης εντολής στην οποία μεταδίδονται τα δεδομένα (χρησιμοποιώντας τον χειριστή σωλήνων "|"). Οι κανονικές σωληνώσεις είναι επαρκείς εάν τα δεδομένα προορίζονται να είναι η (τυπική) είσοδος της δεύτερης εντολής.

Για παράδειγμα, εάν χρησιμοποιήσετε την εντολή ls για να δημιουργήσετε μια λίστα με τα ονόματα αρχείων και τους καταλόγους και μετά διοχετεύσετε αυτή τη λίστα στην εντολή xargs που εκτελεί echo , μπορείτε να καθορίσετε πόσες ονοματολογίες αρχείων ή ονόματα καταλόγων επεξεργάζονται με echo σε κάθε επανάληψη ως εξής :

ls | xargs -n 5 echo

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

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

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

βρείτε ./ -τύπος f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

Το στοιχείο "./" στην εντολή find εντοπίζει τον τρέχοντα κατάλογο αναζήτησης. Το όρισμα "-type f" περιορίζει την αναζήτηση σε αρχεία και η σημαία "-name" * .txt "φιλτράρει περαιτέρω οτιδήποτε δεν έχει επέκταση" .txt ". Η σημαία -i στο xargs σηματοδοτεί ότι η { } συμβολισμός αντιπροσωπεύει κάθε όνομα αρχείου του ατμού.

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

find / tmp -name core -type f -print | xargs / bin / rm -f

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

find / tmp - όνομα πυρήνα -τύπος f -print0 | xargs -0 / bin / rm -f

Αντί της επιλογής -i , μπορείτε επίσης να χρησιμοποιήσετε τη σημαία -I, η οποία καθορίζει τη συμβολοσειρά που αντικαθίσταται από τη γραμμή εισόδου στα επιχειρήματα των παραδειγμάτων όπως στο παράδειγμα αυτό:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

Η συμβολοσειρά αντικατάστασης ορίζεται ως "{}". Αυτό σημαίνει ότι τυχόν περιστατικά του "{}" στα επιχειρήματα των εντολών αντικαθίστανται από το στοιχείο εισόδου που προωθείται στο args μέσω της λειτουργίας του σωλήνα. Αυτό σας δίνει τη δυνατότητα να τοποθετήσετε τα στοιχεία εισόδου σε συγκεκριμένες θέσεις στα επιχειρήματα της εντολής που θα εκτελεστεί (επανειλημμένα).