בצע פעולות מרובות ב- Linux עם הפקודה 'xargs'
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
, זה יכול לשמש גם עם פקודות רבות אחרות. עבור דרך הדף הראשי של הפקודה כדי ללמוד עוד על זה, ולהשאיר תגובה למטה אם יש לך ספק / שאילתה.