פקודת grep משולב עם find

avivfl

New member
פקודת grep משולב עם find

פתחתי אצלי קובץ שנקרא avivfl.html שמכיל את השם adi

כשאני מחפש בצורה הזאת הוא מוצא את הקובץ
sudo find / -name *.html
כאשר אני משלב את grep עם התוכן הוא לא מוצא לי אותו
sudo find / -name *.html | grep "adi"

מה הסיבה?, תודה
 

Dניאל Mור

New member
האם ברור לך איך עובד ה - pipe שבו אתה עושה

שימוש בשורת הפקודה שהצגת? ה - pipe "מקבל" את "הפלט התקין" של הפקודה השמאלית ומעביר אותה כ"קלט" לפקודה הימנית. הפלט של הפקודה השמאלית היא רשימת הקבצים והתיקיות המסתיימות בסיומת "html." ועל-פי ההסבר שנתתי לך ואיך שה - pipe עובד, חיפוש המחרוזת בעזרת ה - grep מתבצע על רשימת *שמות הקבצים* עצמה ולא על תוכן הקבצים שנמצאו. pipes הוא נושא חשוב מאד וחזק מאד שבהתחלה יכול קצת לבלבל. צריך לשחק איתו הרבה ואז מבינים בלי בעיה


לידע כללי, אתה בהחלט יכול לעשות את מה שאתה רוצה. חפש מידע על האופציות exec ו - ok של הפקודה find. אתה יודע מה? כך קישור למדריך שכתבתי בדיוק בנושא זה ועוד בשפה העברית (כולל המון דוגמאות): http://danielmor.com/guides/find-DMITPS.pdf

חיפוש נעים!

+דניאל.
 

איתי נ

New member
שימוש ב exec או ב xargs

אם find מוצא הרבה מאוד קבצים השימוש ב -exec יפעיל תהליך חדש לכל קובץ. שימוש בפקודה xargs על רשימת הקבצים הרבה יותר יעיל.

אם משתמשים ב -exec עם grep, כדאי מאוד להוסיף -H (או --with-filename) כדי שנדע באיזה קובץ מצאנו את מה שחיפשנו.

אם שמות קבצים מכילים רווחים, צריך לעבור ל

find .... -print0 | xargs -0 ....

זה עוקף את ברירת המחדל לפיה סימן רווח משמש כמפריד בין שמות קבצים.
 

Dניאל Mור

New member
מסכים עם מה שכתבת על אופן הפעולה

של e xec, מהצד השני, יש גם הגבלה למס' ארגומנטים (במספרים גדולים כמובן) ולכן, לעיתים, דווקא השימוש ב - e xec יכול מאד לסייע (דוגמא מוכרת: נסיון של מחיקה של כמות אדירה של קבצים בעזרת פקודת r m אחת שלא מצליח).

בלינוקס, כמו בלינוקס - אבל לעשות המון דברים בהמון דרכים!

תודה על השיתוף!

+דניאל.
 

איתי נ

New member
xargs בלינוקס מטפל נכון במספר ארגומנטים גדול

אם יש צורך הפקודה המופעלת תקרא יותר מפעם אחת. ראה גם את ההסבר לאופציה -s או --max-chars=max-chars.

במערכת UNIX שהשתמשתי בה לפני הרבה שנים באמת היתה בעייה.

--exec עובד תמיד ונותן יותר גמישות. החסרון היחיד הוא במהירות.
 

איתי נ

New member
find מחזיר שמות הקבצים ולא התוכן שלהם

לכן הפקודה תמצא את הקבצים שבשם שלהם מופיע adi

אתה צריך ללמוד להשתמש בפקודה xargs


sudo find / -name *.html -print0 | xargs -0 grep "adi"
 
למעלה