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

בצורתו הבסיסית, xargs קורא מידע מן הקלט הסטנדרטי (או STDIN) ומבצע פקודה אחת או יותר פעמים עם הפריטים לקרוא.

כאיור, הפקודה הבאה של xargs מצפה מהמשתמש להזין קובץ או שם ספריה:

 xargs ls -l 

לאחר הזנת שם, הפקודה xargs מעבירה את המידע לפקודת ls .

הנה את הפלט של הפקודה המוצגת לעיל xargs כאשר הוצאתי אותו מספריית הבית שלי על ידי הזנת "מסמכים" (שהיא ספריית משנה בתיקייה הבית שלי) כקלט:

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

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

פעולות הקשורות למספר קבצים

נניח שאתה רוצה להעתיק את התוכן של "ref.txt" לכל קבצי. Txt הנוכחי בספרייה. בעוד שהמשימה עשויה לדרוש ממך לבצע פקודות מרובות, הפקודה xargs, יחד עם הפקודה xargs, עושה את זה פשוט.

פשוט הפעל את הפקודה הבאה:

 מצא ./ -name "* .txt" | xargs -n1 cp ../ref.txt 

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

החלק הראשון הוא find ./ -name "*.txt", המחפש את כל קבצי txt הקיימים בספריה הנוכחית.

החלק השני xargs -n1 cp ../ref.txt יהיה לתפוס את הפלט של הפקודה הראשונה (שמות הקבצים וכתוצאה מכך) ולמסור אותו cp (עותק) הפקודה בזה אחר זה. שים לב שהאפשרות -n היא קריטית כאן, מכיוון שהיא מורה ל- xargs להשתמש בארגומנט אחד לכל ביצוע.

כאשר משולבים יחד, הפקודה המלאה תעתיק את התוכן של "ref.txt" לכל קבצי txt בספריה.

פעולות הקשורות למספר רב של טיעונים

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

זה יכול להיות קבוע בקלות עם xargs . כדי למחוק את כל הקבצים האלה, השתמש בפקודה הבאה:

 מצא ./rm-test/ -name "*" -print xargs rm 

פעולות הקשורות לחיפוש דפוסים

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

לדוגמה, כדי לחפש את כל קבצי txt המכילים את המחרוזת "maketecheasier", הפעל את הפקודה הבאה:

 $ find ./ -name "* .txt" | xargs grep "maketecheasier" 

הנה פלט הפלט שהופק על המערכת שלי:

גזור / להעתיק פעולות

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

 למצוא . -name "* .txt" -mmin + 10 xargs -n1 -I '{}' mv '{}' .. 

הפקודה שורת הפקודה -I משמשת את הפקודה xargs כדי להגדיר מחרוזת מחליפה אשר מוחלפת בשמות הנקראים מתוך הפלט של הפקודה xargs . כאן החלף מחרוזת הוא {}, אבל זה יכול להיות כל דבר. לדוגמה, אתה יכול להשתמש "קובץ" כמחליף להחלפה.

 למצוא . -Name "* .txt" -mmin 10 | xargs -n1 -I קובץ 'mv' קובץ './practice 

איך לספר Xargs מתי להפסיק

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

 למצוא . -Name "* .txt" | xargs ls -l 

אבל יש בעיה אחת; הפקודה xargs תבצע את הפקודה ls גם אם הפקודה xargs לא מצאה כל קובץ .txt. הנה דוגמא:

אז אתה יכול לראות כי אין. txt קבצים בספריה, אבל זה לא עצר xargs מ ביצוע הפקודה ls . כדי לשנות אופן פעולה זה, השתמש באפשרות שורת הפקודה -r :

 למצוא . -Name "* .txt" | xargs -r ls-l 

סיכום

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