לדלג לתוכן

פקודת find לעומק - שליטה בחיפוש קבצים בלינוקס

כשצריך למצוא קובץ ספציפי במערכת לינוקס, אפשר כמובן לנווט ידנית בין תיקיות עם ls ו-cd עד שמוצאים אותו. אבל ברגע שהמערכת גדלה, או שאתם מחפשים משהו לפי קריטריון שאינו רק שם, כמו גודל או תאריך שינוי, זה נהיה בלתי אפשרי בלי הכלי הנכון. הכלי הזה הוא find, אחת הפקודות החזקות והכי פחות מוערכות בלינוקס.

החיפוש הבסיסי ביותר

הצורה הפשוטה של find מחפשת קבצים לפי שם, החל מתיקייה מסוימת ובכל תת התיקיות שלה:

find /home/user -name "*.log"

הפקודה הזו סורקת את כל תיקיית המשתמש, ומחזירה כל קובץ שמסתיים ב-.log, ללא תלות בעומק שבו הוא נמצא. שימו לב שהשם עצמו יכול להכיל תווי כלליים כמו כוכבית, ולכן חשוב לשים אותו במרכאות, כדי שהמעטפת - shell - לא תנסה לפרש אותו בעצמה לפני שfind בכלל מקבל אותו.

חיפוש לפי סוג

לפעמים אתם רוצים רק תיקיות, או רק קבצים רגילים, ולא קישורים סימבוליים. לשם כך יש את הדגל type-:

find /var/log -type f -name "*.log"
find /home/user -type d -name "backup*"

f מייצג קובץ רגיל, d מייצג תיקייה, ו-l מייצג קישור סימבולי. השילוב של type- עם name- הוא כנראה הצירוף הנפוץ ביותר בשימוש יומיומי.

חיפוש לפי גודל, תאריך ובעלים

הכוח האמיתי של find מתחיל להתגלות כשמחפשים לפי קריטריונים שאינם רק שם:

find / -size +100M
find /var/log -mtime -7
find /home -user amit

הפקודה הראשונה מוצאת קבצים גדולים מ-100 מגה בייט בכל המערכת, שימושי כשצריך לפנות מקום בדיסק. השנייה מוצאת קבצים ששונו בשבעת הימים האחרונים, שימושי כשמנסים להבין מה השתנה במערכת לאחרונה. השלישית מוצאת קבצים ששייכים למשתמש מסוים. אפשר גם לשלב כמה תנאים יחד, ו-find תתייחס אליהם כברירת מחדל כ"וגם" בין הקריטריונים.

החלק החזק באמת - exec

חיפוש קבצים שימושי, אבל מה שהופך את find לכלי אוטומציה אמיתי הוא היכולת להריץ פעולה ישירות על כל תוצאה שנמצאה, בעזרת exec-:

find /tmp -name "*.tmp" -exec rm {} \;

הפקודה הזו מוצאת כל קובץ עם סיומת tmp. בתיקיית tmp, ומריצה עליו rm כדי למחוק אותו. הסימן {} מייצג את הקובץ שנמצא, וה-\; מסמן את סוף הפקודה שרצה על כל תוצאה. אפשר להחליף rm בכל פקודה אחרת - להעתיק, לדחוס, לשנות הרשאות - וכך להפוך חיפוש פשוט לכלי ניקוי או תחזוקה אוטומטי.

חשוב מאוד להיזהר עם exec- בשילוב עם rm, ותמיד להריץ קודם את הפקודה בלי exec- כדי לוודא שהתוצאות שהתקבלו הן באמת הקבצים שהתכוונתם למחוק.

למה find עדיין רלוונטי בעידן של כלים מודרניים

יש כלים חדשים יותר, כמו fd, שנחשבים ידידותיים יותר ומהירים יותר בברירת מחדל. אבל find מותקן כמעט בכל מערכת לינוקס בלי יוצא מן הכלל, וזמין בכל שרת בלי צורך להתקין תוספת נוספת. זו הסיבה שהוא נשאר כלי חובה לכל מי שעובד עם לינוקס, גם אם יש כלים נוחים יותר לשימוש יומיומי.

לסיכום

find הוא הרבה יותר מ"איפה הקובץ שלי" - הוא כלי חיפוש רב עוצמה שיכול לסנן לפי כמעט כל מאפיין של קובץ, ולהריץ פעולות ישירות על התוצאות. השקעה בלמידה שלו לעומק הופכת אותו מכלי חיפוש בסיסי לכלי אוטומציה שחוסך שעות עבודה ידנית.

רוצים להעמיק עוד בטרמינל ובניווט בקבצים בלינוקס? יש לנו קורס לינוקס בסיסי מלא בחינם שבונה את הידע הזה שלב אחרי שלב.

יש לכם שאלה על find או כלי חיפוש אחרים בלינוקס? בואו לדבר בדיסקורד.

הצטרפו לקהילה בדיסקורד