Πώς μπορώ να grep
αναδρομικά όλους τους καταλόγους και τους υποκαταλόγους;
find . | xargs grep "texthere" *
grep -r "texthere" .
Η πρώτη παράμετρος αντιπροσωπεύει την κανονική έκφραση για αναζήτηση, ενώ η δεύτερη αντιπροσωπεύει τον κατάλογο που θα πρέπει να αναζητηθεί. Σε αυτή την περίπτωση, .
σημαίνει τον τρέχοντα κατάλογο.
Σημείωση: Αυτό λειτουργεί για το GNU grep, και σε ορισμένες πλατφόρμες όπως το Solaris πρέπει να χρησιμοποιήσετε ειδικά το GNU grep σε αντίθεση με την παλαιότερη υλοποίηση. Για το Solaris αυτή είναι η εντολή ggrep
.
Αν γνωρίζετε την επέκταση ή το μοτίβο του αρχείου που θέλετε, μια άλλη μέθοδος είναι να χρησιμοποιήσετε την επιλογή --include
:
grep -r --include "*.txt" texthere .
Μπορείτε επίσης να αναφέρετε τα αρχεία που θέλετε να αποκλείσετε με την επιλογή --exclude
.
Αν ψάχνετε συχνά σε κώδικα, το Ag (The Silver Searcher) είναι μια πολύ πιο γρήγορη εναλλακτική λύση για το grep, η οποία είναι προσαρμοσμένη για την αναζήτηση κώδικα. Για παράδειγμα, είναι αναδρομικό από προεπιλογή και αγνοεί αυτόματα τα αρχεία και τους καταλόγους που αναφέρονται στο .gitignore
, οπότε δεν χρειάζεται να περνάτε συνεχώς τις ίδιες δύσκολες επιλογές αποκλεισμού στο grep ή στο find.
Επίσης:
find ./ -type f -print0 | xargs -0 grep "foo"
αλλά το grep -r
είναι μια καλύτερη απάντηση.