find + grep για απαιτητικούς...τεμπέληδες

Giorgos Keramidas keramida at ceid.upatras.gr
Tue Dec 5 22:15:00 EET 2006


On 2006-12-05 21:41, Nick Demou <ndemou at gmail.com> wrote:
> μια φορά το μήνα τουλάχιστον θα χρειαστεί να κάνω μια αναζήτηση
> "προχωρημένη" για τις ταπεινές μου γνώσεις bash. Π.χ.:
> 
> ψάχνω για αρχεία των τελευταίων 7 ημερών που
>    ΚΑΙ έχουν στις πρώτες 50 γραμμές την λέξη "ΧΧΧ"
>    ΚΑΙ έχουν οπουδήποτε την λέξη "free"
> (οι λέξεις στην τύχη :-)
> 
> εν τέλη με ένα συνδιασμό find -exec, κάποιου πρόχειρου Script και αν
> είμαι άτυχος και κανενός temp αρχείου πάντα κάνω την δουλειά μου αλλά
> το όλο εγχείρημα μου πέρνει αρκετή ώρα (είμαι ξεχασιάρης γέρος και
> ανοίγω την man page του find και του grep και το bash scripting how-to
> κάθε μα κάθε φορά*)
> 
> γνωρίζει κανείς κάποια console based* εναλακτική πρόταση ή ΠΡΕΠΕΙ να
> μάθω απ'έξω κι ανακατοτά το shell?

Πρέπει να μάθεις απέξω κι ανακατωτά το shell:

    find somepath/ -mtime 7d -or -mtime 6d -or -mtime 5d \
        -or -mtime 4d ... | \
    while read file ; do
        xxxflag=$(head -50 "${file}" | grep -q "XXX")
        freeflag=$(grep "free" "${file}")
        if test ${xxxflag} -eq 0 && test ${freeflag} -eq 0 ; then
	    echo "${file}"
	fi
    done

Η `γλώσσα' του shell έχει γραφτεί για να μπορεί κανείς να συνδυάσει, με
σχετικά εύκολο[1] τρόπο, πολλές εντολές και να βγάλει τερατουργήματα
όπως το παραπάνω σε μισό λεπτό.

[1] Εντάξει, το "εύκολο" ήταν λίγο υπερβολικό :)




More information about the Linux-greek-users mailing list