שימושים לדוגמה של הפקודה "xargs"

תיאור ומבוא

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

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

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

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

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

ls | xargs-5 הד

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

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

שורת הפקודה הבאה מחיצות את זרם שמות הקבצים המיוצרים על-ידי חיפוש int הקבוצות של 200 לפני העברת הפקודה cp , אשר מעתיקה אותם לספריית הגיבוי .

./txt "-print xargs -l200 -i cp-f {} ./backup

האלמנט "./" בפקודה find מציין את הספרייה הנוכחית לחיפוש. הטיעון "typepe" מגביל את החיפוש לקבצים, והדגל "-name" .txt "" מסנן עוד כל דבר שאין לו סיומת ".txt" .הדגל -i ב- xargs מציין כי { } nation מייצג כל שם קובץ של האדים.

הפקודה הבאה מוצאת קבצים בשם הליבה בתוך או מתחת לספרייה / tmp ומוחקת אותם.

למצוא / tmp -name הליבה-סוג f-print xargs / bin / rm -f

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

מצא / tmp -name הליבה-סוג f-print0 | xargs -0 / bin / rm -f

במקום האפשרות -i אתה יכול גם להשתמש בדגל -I המציין את המחרוזת שאותה מוחלף על-ידי שורת הקלט בארגומנטים של הפקודה, כמו בדוגמה זו:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

מחרוזת ההחלפה מוגדרת כ- "{}". כלומר, כל המופעים של "{}" בארגומנטים של הפקודה מוחלפים באלמנט הקלט המועבר להתווכח דרך פעולת הצינור. זה מאפשר לך למקם את האלמנטים קלט במיקומים ספציפיים בארגומנטים של הפקודה להיות (שוב ושוב) להורג.