logo

מצא פקודה בלינוקס/יוניקס עם דוגמאות

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

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

הוא מתחיל חיפוש ממיקום רצוי להתחיל ולאחר מכן חוצה באופן רקורסיבי את הספריות (הצמתים) של מבנה היררכי (בדרך כלל עץ). הפקודה find יכולה לחפש ולעבור ממערכות שונות של מחיצות קבצים השייכות להתקן אחסון בודד או יותר תחת ספריית ההתחלה.

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

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

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

 find 

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

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

רכיבי ביטוי מבודדים על ידי גבול הארגומנט של שורת הפקודה, המצוין בדרך כלל כרווח לבן בתוך תחביר המעטפת. הם נחשבים מצד שמאל לצד ימין. הם יכולים לכלול רכיבים לוגיים כמו OR ו-AND וכן פרדיקטים (פעולות ומסננים). GNU find מכיל מספר תכונות אחרות שלא הוזכרו על ידי POSIX.

הסמלים הבאים משמשים לציון הספרייה:

(.) : לשם הספרייה הנוכחית

(/) : עבור ספריית השורש

היסטוריה קצרה של פיקוד מצא

הפקודה find התרחשה בגרסה 5 Unix כרכיב של שולחן עבודה של מתכנת הפרויקט וצוין על ידי דיק הייט עם cpio, שפותחו לשימוש יחד.

במקור, היישום GNU של פקודת find צוין על ידי אריק דקר . מאוחר יותר, הוא פותח על ידי דיוויד מקנזי, טים ווד , ו ג'יי פלט . כמו כן, הפקודה find הועברה ל-IBM i OS.

מחרוזת להשוות ל-java

פרדיקטים

הפריימריז בשימוש נרחב הם:

    -דפוס שם:הוא בודק ששם הקובץ זהה לתבנית ה- shell-glob הנתונה או לא.סוג סוג:הוא בודק שהקובץ הוא מסוג מסופק.-הדפס:זה תמיד נותן את הערך האמיתי. זה מדפיס את שם הקובץ הנוכחי ושורה חדשה ל-stdout.-print0:זה תמיד נותן את הערך האמיתי. הוא מדפיס את שם הקובץ הנוכחי ותו ריק ל-stdout. אין צורך ב-POSIX.תוכנית -exec [טיעון ...];:זה תמיד נותן את הערך האמיתי. זה מפעיל תוכנית עם הארגומנטים הנתונים קבועים ונתיב הקובץ הנוכחי.תוכנית -exec [טיעון ...] { } +:זה תמיד נותן את הערך האמיתי. זה מפעיל תוכנית עם הארגומנטים הנתונים קבועים וכמה נתיבים שאפשר. כמעט עבור כל יישום, מופעים אחרים של {} פירושם עותקים נוספים של השם הנתון (היבט שאינו נחוץ ב-POSIX).תוכנית -בסדר [טיעון...];:זה זהה ל-exec, אבל יחזיר false או true אם התוכנית נותנת 0.

מצא ברירות מחדל ליישום -print במקרה שהתנאים מתקיימים אם הביטוי לא משתמש באף אחד מה-ok, -exec, -print או -print0.

מפעילים

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

    ( expr ):מפעיל זה יכול לכפות עדיפות.! expr:אם expr מחזיר false, הוא מחזיר true.
  • 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. ייתכן שיהיה צורך לסגור שמות קבצים מסובכים יותר המכילים תווים ייחודיים למעטפת במרכאות בודדות.