הפקודה find עוזרת לנו למצוא קובץ מסוים בתוך ספרייה. הוא משמש כדי למצוא את רשימת הקבצים עבור התנאים השונים כמו הרשאה, בעלות משתמש, שינוי, תאריך/שעה, גודל ועוד.
במערכות הפעלה דמויות יוניקס ואחרות, הפקודה find היא כלי שורת פקודה שמוצא קבצים על בסיס כמה פורמטים שצוינו על ידי המשתמש, או מדפיס את כל שם הנתיב של האובייקט התואם או, אם מתבקשות לבצע פעולות אחרות, מיישם את הפעולה הזו ב- כל האובייקטים התואמים.
הוא מתחיל חיפוש ממיקום רצוי להתחיל ולאחר מכן חוצה באופן רקורסיבי את הספריות (הצמתים) של מבנה היררכי (בדרך כלל עץ). הפקודה find יכולה לחפש ולעבור ממערכות שונות של מחיצות קבצים השייכות להתקן אחסון בודד או יותר תחת ספריית ההתחלה.
פורמט החיפוש מכיל דפוס להתאמה עם שם הקובץ או טווח הזמן להתאמה לזמן השינוי או זמן הגישה לקובץ. הפקודה find מספקת רשימה של כל קובץ תחת ספריית העבודה הנוכחית כברירת מחדל. עם זאת, משתמשים יכולים להגביל את החיפוש לרמה מקסימלית רצויה בספריית ההתחלה.
תוכניות האיתור המשויכות מיישמות מסד נתונים של קבצים באינדקס המתקבל מהפקודה fine כדי לתת טכניקה מהירה יותר לחיפוש בכל מערכת הקבצים לפי שם.
כלי העזר לחיפוש מגיע כברירת מחדל עם רוב הפצות לינוקס , כך שאיננו צריכים להתקין חבילה נוספת. זוהי אחת הפקודות החיוניות והמשומשות ביותר של לינוקס מערכת.
find
שתי האפשרויות קובעות כיצד למצוא צריך לשקול קישורים סמליים. אופי ברירת המחדל הוא לעולם לא לרדוף אחרי קישורים סמליים. הדגל, כלומר, -ל , יוביל למצוא לרדוף אחר קישורים סמליים. הדגל, כלומר, -ח , פשוט יחפש קישורים סמליים תוך כדי המשך עם הארגומנטים של שורת הפקודה. הדגלים מוזכרים בתקן POSIX עבור הפקודה find. הרחבה בסיסית היא דגל, כלומר, -פ , כדי להשבית במפורש את הקישור הסמלי הבא.
לפחות נתיב חייב לצפות את הביטוי. פקודת המצא יכולה לפרש תווים כלליים באופן פנימי, ויש לצטט פקודות בקפידה כדי לנהל את הגלוב של מעטפת.
רכיבי ביטוי מבודדים על ידי גבול הארגומנט של שורת הפקודה, המצוין בדרך כלל כרווח לבן בתוך תחביר המעטפת. הם נחשבים מצד שמאל לצד ימין. הם יכולים לכלול רכיבים לוגיים כמו OR ו-AND וכן פרדיקטים (פעולות ומסננים). GNU find מכיל מספר תכונות אחרות שלא הוזכרו על ידי POSIX.
הסמלים הבאים משמשים לציון הספרייה:
(.) : לשם הספרייה הנוכחית
(/) : עבור ספריית השורש
היסטוריה קצרה של פיקוד מצא
הפקודה find התרחשה בגרסה 5 Unix כרכיב של שולחן עבודה של מתכנת הפרויקט וצוין על ידי דיק הייט עם cpio, שפותחו לשימוש יחד.
במקור, היישום GNU של פקודת find צוין על ידי אריק דקר . מאוחר יותר, הוא פותח על ידי דיוויד מקנזי, טים ווד , ו ג'יי פלט . כמו כן, הפקודה find הועברה ל-IBM i OS.
מחרוזת להשוות ל-java
פרדיקטים
הפריימריז בשימוש נרחב הם:
מצא ברירות מחדל ליישום -print במקרה שהתנאים מתקיימים אם הביטוי לא משתמש באף אחד מה-ok, -exec, -print או -print0.
מפעילים
אופרטורים משפרים את ביטויי פקודת החיפוש. הם מוזכרים לפי סדר העדיפויות היורד:
- expr1 expr2 (או expr1 -a expr2 : AND. expr2 לא מוערך אם expr1 הוא false.
- expr1 -o expr2 : או. expr2 לא מוערך אם expr1 נכון.
דוגמאות לפקודה למצוא
בוא נראה את הדוגמאות הבאות של פקודת find:
- מצא קבצים לפי שם
- מצא קבצים לפי סוג
- מצא קבצים חדשים יותר
- מצא ומחק קובץ
- מצא ספרייה
- מצא קבצים לפי זמן שינוי
- מצא קבצים בהרשאה
- מצא והחלף קבצים
- מצא טקסט בתוך מספר קבצים
מצא קבצים לפי שם
נוכל לחפש בכל הקבצים המסתיימים בסיומת '.txt'. כדי לעשות זאת, בצע את הפקודה הבאה:
find . -name '*.txt'
הפקודה לעיל תפרט את כל קבצי הטקסט מספריית העבודה הנוכחית. שקול את הפלט שלהלן:
מהפלט לעיל, כל הקבצים בעלי סיומת '.txt' מופיעים עם הפקודה find.
מציאת קבצים לפי סוג
הפרמטר '-type' משמש לציון סוג הקובץ.
חלק מסוגי הקבצים הם כדלקמן:
- f: קובץ רגיל
- ד: ספרייה
- l: קישורים סמליים
- ג: התקני תו
- ב: לחסום מכשירים
שקול את הפקודה הבאה:
אובייקט Java
find . -type d -name '*.bak'
הפקודה לעיל תפרט את כל הספריות בעלות סיומת '.bak'. שקול את הפלט שלהלן:
מהפלט לעיל, הפקודה 'מצא . -type d -name '*.bak' מציג את כל הספריות המסתיימות ב-'.bak'.
מצא קבצים חדשים יותר
הפרמטר '-newer' עוזר בחיפוש בקבצים שהם חדשים יותר מהקובץ שהוזכר. שקול את הפקודה הבאה:
find . -newer msg.txt
הפקודה לעיל תציג את כל הקבצים שהם חדשים יותר מ- ' msg.txt' מספריית העבודה הנוכחית. שקול את הפלט שלהלן:
מהפלט לעיל, כל הקבצים המוצגים חדשים יותר מקובץ 'msg.txt'.
מצא ומחק קובץ
האפשרות '-delete' משמשת למחיקת קובץ ספציפי. אנו צריכים להיות זהירים מאוד בעת השימוש בפקודה זו מכיוון שאין אפשרות ביטול אם היא מבוצעת פעם אחת. שקול את הפקודה הבאה:
find . -name Demo.txt -delete
הפקודה לעיל תמחק את הקובץ 'Demo.txt' מספריית העבודה הנוכחית. שקול את הפלט שלהלן:
מצא ספרייה
האפשרות 'סוג -d' משמשת למציאת ספרייה. שקול את הפקודה הבאה:
find . type -depth -name Newdirectory
הפקודה לעיל תמצא את המיקום 'Newdirectory'. שקול את הפלט שלהלן:
מצא קבצים לפי זמן שינוי
האפשרות '-mtime', ואחריה מספר הימים, משמשת לאיתור הקבצים על ידי שינוי. מספר הימים יכול להיות חיובי או שלילי. הערך השלילי ישמש עבור פחות מאשר -1 משמש עבור היום האחרון, ובאופן דומה, +1 ימצא את הקובץ של לפני יותר מיום אחד. שקול את הפקודה הבאה:
find ./Newdirectory -mtime -1
הפקודה לעיל תמצא את הקבצים ששונו במהלך היום האחרון. שקול את הפלט שלהלן:
מצא קבצים בהרשאה
האפשרות '-perm' משמשת לאיתור קבצים לפי הרשאה. בצע את הפקודה find עם האפשרות '-perm' והעביר את הערך הנדרש. שקול את הפקודה הבאה:
find ./ -perm 777
הפקודה לעיל תפרט את הקבצים מהספרייה שצוינה שכולם יכולים לקרוא, לכתוב ולהפעיל.
סימון הערות שוליים
מצא והחלף קבצים
כדי למצוא ולהחליף קבצים, עלינו לשלב את פקודת find עם הפקודה sed. כדי לפעול על קבצים, השתמש באפשרות '-exec' עם הפקודה find. שקול את הפקודה הבאה:
find ./Newdirectory -type f -exec sed -i 's/find/replace/g' {} ;
מהפקודה לעיל, ההתרחשות שצוינה תוחלף. שקול את הפלט שלהלן:
מצא טקסט בתוך מספר קבצים
נוכל לבצע שילוב נוסף של פקודת find עם פקודת grep כדי למצוא את הטקסט מהקבצים השונים. שקול את הפקודה הבאה:
find ./Newdirectory -type f -name '*.txt' -exec grep 'demo' {} ;
הפקודה לעיל תמצא את השורות המכילות את הטקסט 'הדגמה' מכל קבצי הטקסט בתוך הספרייה 'Newdirectory'. שקול את הפלט שלהלן:
מהפלט לעיל, אנו יכולים לראות את השורות שבהן הטקסט 'הדגמה' הוצג.
חפש בכל ספרייה
$ find / -name file1 -type f -print
הפקודה לעיל מוצאת את כל הספריות עבור קובץ רגיל שכותרתו היא file1 ומדפיסה אותו על המסך. בדרך כלל, זה לא רעיון טוב לחפש קבצים בדרך זו. זה יכול לקחת הרבה זמן. אז עדיף להזכיר את הספרייה. מערכות הפעלה בודדות עשויות לעלות מערכות קבצים (דינמיות) שאינן טובות לפקודת find. ייתכן שיהיה צורך לסגור שמות קבצים מסובכים יותר המכילים תווים ייחודיים למעטפת במרכאות בודדות.